2024–25シーズン、MVPを受賞したシェイ・ギルジャス=アレクサンダー(以下SGA)は、スコアリングにおける圧倒的な完成度を示し続けました。
今季のSGAは、2024年11月2日のポートランド・トレイルブレイザーズ戦から2025年4月5日のヒューストン・ロケッツ戦まで、70試合連続で20得点以上を記録。これはマイケル・ジョーダンの記録(69試合連続)を超え、NBA史上4番目の長さとなりました。
本記事では、そんなSGAのMVPにふさわしい得点力を、以下の3つの構造的な視点で掘り下げていきます。
- ショットの距離
- 試合時間の経過
- クラッチタイム(試合終盤のプレッシャー)
なお、データはBigDataBallウェブサイトで購入したPbP. BDB(いわゆるPlay By Playデータ、過去記事を参照)を使用しており、分析は統計ソフトRにより実行しています。
それでは、“数字で語るMVP”を、構造とロジックでひも解いていきましょう。
※データ分析を実践する際に参考にしている書籍『Basketball Data Science: With Applications in R』の紹介記事も書いていますので、よろしければご確認ください。
📊【 シェイ・ギルジャス=アレクサンダーの基本スタッツ 】
まずは、シーズン全体を通した得点力に関する主要スタッツを確認しましょう。以下は、2024–25レギュラーシーズン終了時点における、SGAのスタッツ(一部抜粋)とリーグ内での順位をまとめたものです。
表1: シェイ・ギルジャス=アレクサンダーの基本スタッツ (2024–25 レギュラーシーズン)
項目 | スタッツ | 順位 | 備考(2位との比較) |
PTS | 2484 | 1位 | アンソニー・エドワーズ:2177 |
FGM | 860 | 1位 | ヤニス・アデトクンボ:793 |
FTM | 601 | 1位 | ジェームズ・ハーデン:505 |
+/- | 918 | 1位 | ニコラ・ヨキッチ:594 |
SGAは得点(2484点)・FG成功数(860本)・FT成功数(601本)・Plus/Minus(+918)すべてでリーグ1位を記録しました。いずれも2位に大差をつけており、スコアリング能力と試投効率、そしてチームへの影響力を高次元で両立していることがわかります。
この圧巻のスタッツを起点に、以降はショットチャートや得点期待値などの構造的な視点から、SGAの得点スタイルと効率の裏付けを丁寧に読み解いていきます。
📈【 ショットチャートで見るシェイ・ギルジャス=アレクサンダーの得点傾向 】
<ショットチャート>
ここでは、SGAのショット試投や得点の傾向を把握するために、同選手のショットチャート(セクターマップとHexbinマップ)を確認していきます。
(※セクターマップの見方はこちら、Hexbinマップの見方はこちらを参照。)


※クリックで拡大可
上記のチャートから読み取れる傾向、浮かび上がるSGAのプレースタイルをまとめます。
🏀 SGAの得点傾向とプレースタイルの分析
✅ ペイントエリア〜ミドルエリア
- プレイの密度が高く、成功率も高い(特にリム周りでは69%、リム正面では57%など)→ ドライブ力とフィニッシュ力が非常に高いことを示唆
- Hexbinマップで見てもこのエリアは圧倒的に密集 → 「得点源はこのエリア」と見て間違いなし
- ペイントエリア~ミドルエリアではplaylengthが早め
- ロングミドルではplaylengthが長め → おそらくオプションがなくなって打たされた形
✅ 3Pエリア
- 中央~両ウィングのplaylengthは比較的短め → プルアップスリーの可能性
- 特に左ウィング〜トップが得意ゾーンの可能性あり(ドライブからのステップバックを多用するなど)
- コーナースリーが極端に少ない上にplaylengthが長め → コーナーで待機しキャッチ&シュートという流れはほぼ無い、おそらくオプションがなくなって打たされた形
以上を考慮するとSGAについては、ドライブやプルアップなどで自ら得点機会を作り出すプレーヤーでありながら、3Pトップ~両ウィングにかけてはプルアップスリーを仕掛けてくる万能型スコアラーといったようなプレースタイルが浮かび上がってきます。
<アシスト付き vs 自力得点の割合>
次に、SGAが自ら得点機会を作り出すプレーヤーであるかどうかを確認するために、SGAが獲得した得点を分類していきます。下記の表は、SGAの得点が自力で獲得したもの(自力得点)か、それともアシストによるもの(アシスト付き得点)かを分類し、それぞれの得点の総得点に対する割合を示したものになります。なお、比較対象として得点ランキング2位のアンソニー・エドワーズ、同3位のニコラ・ヨキッチも併記しています。
表2:得点内訳 – 自力得点とアシスト付き得点の割合 (2024–25 レギュラーシーズン)
プレイヤー | 自力得点(点) | アシスト付き得点(点) | 自力得点の割合 | アシスト得点の割合 | 合計得点 |
シェイ・ギルジャス=アレクサンダー | 1431 | 470 | 75.3% | 24.7% | 1901 |
アンソニー・エドワーズ | 998 | 764 | 56.6% | 43.4% | 1762 |
ニコラ・ヨキッチ | 507 | 1203 | 29.6% | 70.4% | 1710 |
上記の表を確認するとSGAは約75%の得点(1431点)をアシストを受けずに作り出していることがわかります。上記の表から読み取れる点を下記にまとめていきます。
✅ SGA:自己完結型スコアラー
- 得点の75.3%がアシストなしの自力得点(プルアップ・ドライブ・アイソレーションが主体)
- アシスト付き得点は他のプレイヤーと比較しても最小レベル
- アシスト付き得点が少ないことから → キャッチ&シュート型ではなく、自分で創るスコアラー
✅ アンソニーエドワーズ:比較的バランス型
- 56.6%が自力得点 → 比較的1on1で崩すタイプ
- でもアシスト付き得点の割合もそこそこ → 状況に応じて周りとの連携に対応する柔軟性あり
✅ ニコラ・ヨキッチ:連携型
- 70.4%がアシスト付き得点 → 周りとの連携重視
上記の点を踏まえると、SGAについては自分で得点機会を創出し、自分で決めきる真のエースタイプのプレーヤーであると言えそうです。
🎯【 シェイ・ギルジャス=アレクサンダーの成功率と傾向<ショット距離ベース> 】
<ショット距離別の成功率と傾向>
次にSGAのショットを距離帯で分類し、各距離帯での成功率や試投割合を見ていきます。下記の表は、SGAのショットにつき距離帯ごとの試投数、成功数、試投割合、成功率(FG%)を示したものになります。
表3:SGA – ショット距離別のパフォーマンス (2024–25 レギュラーシーズン)
距離帯(フィート) | 試投数(本) | 成功数(本) | 試投割合 | 成功率(FG%) |
0–4 ft (2P) | 454 | 310 | 27.2% | 68.3% |
5–9 ft (2P) | 245 | 112 | 14.7% | 45.7% |
10–14 ft (2P) | 323 | 176 | 19.3% | 54.5% |
15–19 ft (2P) | 186 | 91 | 11.1% | 48.9% |
20+ ft (3P) | 463 | 177 | 27.7% | 38.2% |
上記の表から読み取れるSGAのショット傾向と得点スタイルを下記にまとめていきます。
🏀このデータからわかるSGAのプレースタイル分析
✅ 1. リム周り(0–4ft)
- FG%が68.3%という超高効率ゾーン → ドライブでリングにアタックするプレーが主な得点源
- 試投割合が27.2%であり3Pゾーン(20ft以上)と並んで最多のゾーン
✅ 2. ショートレンジ(5–9ft)
- 成功率45.7%は3Pゾーン(20ft以上)に次いで意外に低く、試投割合も14.7%と低め → 下記の理由が考えられる
- (理由) NBA公式でSGAの実際の得点シーンを確認してみると、SGAがトップからドライブすると5–9 ftのエリアに相手ビッグマンやヘルプDFが集まるシーンが見受けられる
- → SGAは「5–9 ftでDFにぶつかる非効率のタフショット」より「10–14 ftで止まる」を選択
- → 10–14 ftのスペースでストップしてプルアップを判断
- SGAはディフェンスの挙動を読んで最適解(自身にとって効率のいいミドル)を選んでいる
✅ 3. ミドルレンジ(10–14ft)
- 高効率(成功率54.5%) & 使用頻度も高い(試投割合19.3%) → SGAのプルアップジャンパーが機能している
✅ 4. ロングミドル(15–19ft)
- 試投割合が11.1%と最も少ない → 前掲のHexbinマップと整合性あり、このゾーンは「使わない・使いたくない」ゾーンとして明確に見える
✅ 5. 3Pゾーン(20ft以上)
- 成功率はやや低め(38.2%)だが、試投数は最多級(463本)→ スペースを使ったプルアップ3Pも武器としている
- 試投割合が27.7%でありリム周り(0–4ft)と並んで最多のゾーン
✅ 6. 得点期待値ベースでの試投数制御
- 得点期待値 = FG% × 得点(= 2 or 3)
- 5–9 ftは0.91点、15–19 ftは0.98点 → どちらも1点未満で期待値低め
- それらの試投割合も明確に低い(14.7%、 11.1%) → SGA自身(またはチーム全体)が把握していて、意図的に回避してる可能性あり
- SGAは「打つなら効率のいいゾーンに絞る」という選択をしている
上記の点を踏まえると、SGAのショット選択は「圧倒的な自己完結力」×「効率的なレンジ選択」×「IQの高さ」で構成されており、現代型スコアラーの理想系であると言えそうです。
<得点期待値チャート(距離ベース)>
ここではSGAのショットについて、ショット距離による得点期待値の変化を確認していきます。下記のチャートはSGAの得点期待値(紫色)とリーグ平均の得点期待値(赤色)の推移をショット距離を横軸にとって示したものになります。
(※チャートの見方はこちら、グレーの破線は1ショットから期待できる平均得点(約1.1)、リーグ平均値はサンプル数5000で算出。)

上記のチャートの推移を前述したショット距離帯ごとのデータも考慮して表にまとめると、下記のようになります。
表4:SGA – ショット距離による得点期待値の推移 (2024–25 レギュラーシーズン)
距離 | 期待値の変化 | 解釈 |
5–9 ft | 急落 | DF密集エリア、非効率ゾーン |
10–14 ft | 横ばいに推移 | プルアップが機能してるゾーン |
15–19 ft | 再度低下 | ロングミドルの「デッドゾーン」 |
20+ ft | 上昇 | プルアップ3などで得点効率回復 |
全体 | リーグ平均より上 | 20ft前後でリーグ平均を局所的に下回るが、SGAのスコアリング能力の高さを裏付ける曲線 |
続いて、上記のチャートと表から読み取れるSGAの得点効率の特徴をまとめていきます。
✅ SGAの得点効率の“谷”が浅い
- リーグ平均(赤)は15ft前後で期待値が0.9前後にまで落ちるのに対して、SGA(紫)は そこまで落ち込まない(谷が浅くなってる)
- 👉 苦手ゾーンが少なく、“安定して得点が取れる選手”であることが見える!
✅ SGAの期待値カーブが“滑らか”
- リーグ平均は「下がって→上がって→また下がる」みたいに上下の変動が大きい
- SGAはリーグ平均と比べれば全体としてスムーズで、極端な弱点がない
- 👉 これはプレーの選択が論理的で効率的であることを示している!
以上の点を踏まえると、SGAについては「強みとしているゾーンを中心に打ち、苦手ゾーンは最小限」に抑えているという印象を受けます。その結果、得点期待値の観点でもリーグ平均を安定して上回っており、「スキル×判断力×IQ」 が揃ったエリートスコアラーであると言えます。
⌚【 シェイ・ギルジャス=アレクサンダーの得点期待値チャート<試合時間ベース> 】
<得点期待値チャート(試合時間ベース)>
ここではSGAのショットについて、試合時間による得点期待値の変化を確認していきます。下記のチャートはSGAの得点期待値(紫色)とリーグ平均の得点期待値(赤色)の推移を試合時間を横軸にとって示したものになります。
(※チャートの見方はこちら、グレーの破線は1ショットから期待できる平均得点(約1.1)、リーグ平均値はサンプル数5000で算出。)

上記のチャートと表から読み取れるSGAの得点効率の特徴をまとめていきます。
✅ 試合全体を通して安定したスコアリング力
- SGAはほぼ試合全体でリーグ平均を上回る
✅ 試合終盤でリーグ平均を下回るパフォーマンス
- 終盤(残り320秒くらい)でリーグ平均に逆転される → スコアリングの爆発力を試合終盤まで維持できていない、あるいはクラッチタイムで十分なパフォーマンスを発揮できていない?(低下の要因は後述を参照)
以上の点を踏まえると、SGAについては試合中盤まではリーグ平均値を大きく上回る得点効率を示しますが、終盤にかけてはその期待値は大きく落ち込みリーグ平均値を下回るパフォーマンスとなっていることが分かりました。次は試合終盤の時間帯におけるパフォーマンスに焦点をあてるという意味で、クラッチタイムにおけるSGAの得点期待値を確認していきます。
<クラッチタイム分析>
下記のチャートはSGAの得点期待値(茶色)とリーグ平均の得点期待値(赤色)の推移に関して、クラッチタイムの時間帯を横軸にとって示したものになります。なお、比較対象としてクラッチタイムで得点と3P成功数がトップ(2024-25レギュラーシーズン終了時点)のアンソニー・エドワーズの得点期待値(オレンジ色)も併記しています。
(※チャートの見方はこちら、グレーの破線は1ショットから期待できる平均得点(約1.1)、リーグ平均値はサンプル数3000で算出、クラッチタイムのスタッツはNBA公式を参照。)

上記のチャートから読み取れる各プレイヤーの得点効率の特徴をまとめていきます。
✅ SGAはピークとボトムの差が大きい
- クラッチタイム序盤(2600〜2625秒)で大幅に上昇(最大1.8以上)
- ただしそのあとは、一気に落ち込んで1.0を下回るゾーンへ
- さらにその後、約1.25あたりまで急上昇
- これらの変動によるギャップが大きく、安定性に欠けて見える
- なお、上記で指摘したギャップの大きさは下記の2つの理由が考えられる
- 今季のOKCは戦績で頭一つ抜けた好成績を残しており、そもそもクラッチタイムで戦う場面が少ない → 試行数(データの数)が少ないことで結果の感度が高くなりすぎている(下記参照)
- 実際にSGAのクラッチタイムのパフォーマンスにムラがある
✅ アンソニー・エドワーズの得点期待値は右肩上がりからの高止まり
- 約2600〜2750秒まで緩やかな上昇傾向 → この時間帯はチームのオフェンスの中心を担いながら、着実に得点を重ねたと予想できる
- 2750〜2850秒では1.2付近で横ばい → 高水準をキープできており、安定感のあるパフォーマンスの印象
- SGAの変動の大きい波と比べて、冷静にゲームをコントロールできるタイプにも見える
- 統計的に「期待値がフラットで高い」=成功パターンを再現し続けている可能性
以上を踏まえてSGA、アンソニー・エドワーズ、リーグ平均値の特徴を表にまとめると下記のようになります。
表5:クラッチタイムにおける得点期待値の特徴と比較表
特徴 | アンソニー・エドワーズ | シェイ・ギルジャス=アレクサンダー | リーグ平均値 |
得点期待値の最大値 | 約1.22 | 約1.85 | 約1.12 |
得点期待値の最小値 | 約0.75 | 約0.62 | 約1.00 |
傾向 | 徐々に上昇し、横ばいで高止まり | 序盤でピーク→一気に落ち込み | 安定してフラット |
安定性 | 高い(波が少ない) | 低い(波が激しい) | 高い |
解釈 | 安定して頼れるクラッチスコアラー | 潜在能力は高いが波がある | 通常のクラッチ得点水準 |
※参考:SGAのギャップの大きさについて
今季のOKCのクラッチタイムプレイ時間は66.0MIN(2024-25レギュラーシーズン終了時点)でリーグ最少となっている。それに合わせるようにSGAのクラッチタイムプレイ時間も62.1MIN(同時点)と短く、アンソニー・エドワーズの160.4MINと比べてその差は大きい。SGAのクラッチでの出場時間の短さはスタッツが伸びにくい原因となり、そのぶんサンプル数も少なくなるため得点期待値のチャートもややブレやすくなる(単純にクラッチの試行回数が少ないためデータが揺れやすい)。また、前述した試合終盤にかけてSGAの得点期待値が低下していく現象については、今期のOKCが強くて十分な点差をつけて試合終盤を迎える展開が多いため、試合終盤でSGAは本来のパフォーマンスを抑えてプレイしているという解釈も出来る。
🔚【 おわりに 】
今回の分析から見えてきたのは、SGAの得点力が単なる“爆発力”にとどまらず、自己完結力・効率的なレンジ選択・高いスキルが組み合わさった構造的な強さに支えられているという点です。
- ✅ 自ら得点機会を創出し(75%以上が自力得点)
- ✅ 得点期待値の高いエリアに打点を集中させ(0–4ftで68.3%、10–14ftで54.5%)
- ✅ 試合中盤まで安定した効率を維持しながら(平均1.1点超)
- ✅ 必要な場面でプルアップやドライブで主導権を握る
さらに、「70試合連続20得点以上」という驚異的な一貫性と継続性は、2024–25シーズンMVPという成果を強く裏付けるものでした。
SGAは、まさに“データが証明する現代型スコアラー”。その存在感と影響力は、今後さらに高まっていくことでしょう。今後はクラッチタイムやプレーオフでの再現性、他のMVP候補との比較など、さらなる分析も展開していく予定です。
ここまで読んでいただきありがとうございました。
それでは、今回のトラッシュトークは以上です。
📺 この記事を、解説した動画も公開中です!
「なぜSGAは止められないのか?得点期待値で読み解く“自己完結型スコアラー”の実像」をテーマに、この記事の内容をもとにした動画をYouTubeで公開しています。
※参考<統計ソフトRに入力するコマンド>
統計ソフトRのインストール手順をまとめた記事も作成していますので、よろしければご参考ください。
library(BasketballAnalyzeR)
library(dplyr)
dts.PbP.2425 <- read.csv(file="(10-22-2024)-(04-13-2025)-combined-stats.csv")
PbP2425 <- PbPmanipulation(dts.PbP.2425)
write.csv(PbP2425, "PbP2425.csv")
# Shai Gilgeous-Alexander Shot Chart
PbP2425sga <- subset(PbP2425, player=="Shai Gilgeous-Alexander")
PbP2425sga$xx <- PbP2425sga$original_x/-10
PbP2425sga$yy <- PbP2425sga$original_y/10-41.75
p1 <- shotchart(
data = PbP2425sga,
x = "xx", y = "yy",
z = "playlength",
num.sect = 5,
type = "sectors",
scatter = FALSE,
result = "result"
)
p1 +
ggtitle("Shai Gilgeous-Alexander Shot Chart < 2024-25 Regular Season >") +
scale_x_reverse() +
scale_y_reverse()
# Shai Gilgeous-Alexander Hexbin Map
p2 <- shotchart(
data = PbP2425sga,
x = "xx", y = "yy",
type="density-hexbin", nbins=50, palette="bwr"
)
p2 +
ggtitle("Shai Gilgeous-Alexander Hexbin Map < 2024-25 Regular Season >") +
scale_x_reverse() +
scale_y_reverse()
# Scoring Breakdown
df <- read.csv("PbP2425.csv")
sga_made <- df %>%
filter(player == "Shai Gilgeous-Alexander", result == "made", event_type == "shot", !is.na(points))
assist_summary <- sga_made %>%
mutate(assist_type = ifelse(is.na(assist) | assist == "", "Unassisted", "Assisted")) %>%
group_by(assist_type) %>%
summarise(
shot_count = n(),
total_points = sum(points, na.rm = TRUE)
) %>%
mutate(
shot_pct = round(100 * shot_count / sum(shot_count), 1),
point_pct = round(100 * total_points / sum(total_points), 1)
)
print(assist_summary)
ae_made <- df %>%
filter(player == "Anthony Edwards", result == "made", event_type == "shot", !is.na(points))
ae_assist_summary <- ae_made %>%
mutate(assist_type = ifelse(is.na(assist) | assist == "", "Unassisted", "Assisted")) %>%
group_by(assist_type) %>%
summarise(
shot_count = n(),
total_points = sum(points, na.rm = TRUE)
) %>%
mutate(
shot_pct = round(100 * shot_count / sum(shot_count), 1),
point_pct = round(100 * total_points / sum(total_points), 1)
)
print(ae_assist_summary)
nj_made <- df %>%
filter(player == "Nikola Jokic", result == "made", event_type == "shot", !is.na(points))
nj_assist_summary <- nj_made %>%
mutate(assist_type = ifelse(is.na(assist) | assist == "", "Unassisted", "Assisted")) %>%
group_by(assist_type) %>%
summarise(
shot_count = n(),
total_points = sum(points, na.rm = TRUE)
) %>%
mutate(
shot_pct = round(100 * shot_count / sum(shot_count), 1),
point_pct = round(100 * total_points / sum(total_points), 1)
)
print(nj_assist_summary)
# Shooting Performance by Shot Distance
df_sga <- df %>%
filter(player == "Shai Gilgeous-Alexander", !is.na(shot_distance), !is.na(result)) %>%
mutate(
made = ifelse(result == "made", 1, 0),
range = case_when(
shot_distance < 5 ~ "0–4 ft (2P)",
shot_distance < 10 ~ "5–9 ft (2P)",
shot_distance < 15 ~ "10–14 ft (2P)",
shot_distance < 20 ~ "15–19 ft (2P)",
TRUE ~ "20+ ft (3P)"
)
)
distance_summary <- df_sga %>%
group_by(range) %>%
summarise(
attempts = n(),
makes = sum(made),
FG_percent = round(100 * makes / attempts, 1)
) %>%
mutate(
attempt_pct = round(100 * attempts / sum(attempts), 1)
) %>%
arrange(factor(range, levels = c(
"0–4 ft (2P)", "5–9 ft (2P)", "10–14 ft (2P)", "15–19 ft (2P)", "20+ ft (3P)"
)))
print(distance_summary)
# Expected Points by Shot Distance
set.seed(123)
PbP_league_sample <- df %>%
filter(
result != "",
!is.na(converted_x),
!is.na(converted_y),
!is.na(shot_distance)
) %>%
sample_n(5000) %>%
mutate(player = "League Average")
PbP_sga <- df %>%
filter(player == "Shai Gilgeous-Alexander",
result != "", !is.na(converted_x),
!is.na(converted_y))
PbP_combined <- bind_rows(PbP_sga, PbP_league_sample)
pl <- c("Shai Gilgeous-Alexander", "League Average")
ep1 <- expectedpts(
data = PbP_combined,
players = pl,
team = FALSE,
palette = colorRampPalette(c("red", "blue")),
col.hline = "gray"
)
ep1 +
ggtitle("Expected Points by Shot Distance: Shai Gilgeous-Alexander vs League Average < 2024-25 Regular Season >")
# Expected Points by Total Time
PbP_sga <- df %>%
filter(
player == "Shai Gilgeous-Alexander",
result != "",
event_type %in% c("shot", "miss"),
!is.na(points),
!is.na(totalTime)
)
set.seed(42)
PbP_league_avg <- df %>%
filter(
result != "",
event_type %in% c("shot", "miss"),
!is.na(points),
!is.na(totalTime)
) %>%
sample_n(5000) %>%
mutate(player = "League Average")
PbP_combined_time <- bind_rows(PbP_sga, PbP_league_avg)
players_time <- c("Shai Gilgeous-Alexander", "League Average")
ep2 <- expectedpts(
data = PbP_combined_time,
var = "totalTime",
players = players_time,
team = FALSE,
bw = 1200,
col.hline = "gray",
palette = colorRampPalette(c("red", "blue")),
title = "SGA vs League Average: Expected Points Over Game Time"
)
ep2 +
ggtitle("Expected Points by Total Time: Shai Gilgeous-Alexander vs League Average < 2024-25 Regular Season >")
# Expected Points by Clutch Time
PbP_sga_ant_clutch <- df %>%
filter(
player %in% c("Shai Gilgeous-Alexander", "Anthony Edwards"),
result != "",
event_type %in% c("shot", "miss"),
!is.na(points),
!is.na(totalTime),
abs(home_score - away_score) <= 5,
totalTime >= 2580
)
set.seed(456)
PbP_league_clutch <- df %>%
filter(
result != "",
event_type %in% c("shot", "miss"),
!is.na(points),
!is.na(totalTime),
abs(home_score - away_score) <= 5,
totalTime >= 2580
) %>%
sample_n(3000) %>%
mutate(player = "League Average")
PbP_clutch_combined_3 <- bind_rows(PbP_sga_ant_clutch, PbP_league_clutch)
players_clutch_3 <- c("Shai Gilgeous-Alexander", "Anthony Edwards", "League Average")
ep4 <- expectedpts(
data = PbP_clutch_combined_3,
var = "totalTime",
players = players_clutch_3,
team = FALSE,
bw = 80,
x.range = c(2580, 2880),
col.hline = "gray",
palette = colorRampPalette(c("orange", "red", "black")),
title = "Expected Points in Clutch Time: SGA vs Ant vs League"
)
ep4 +
ggtitle("Expected Points by Clutch Time: Shai Gilgeous-Alexander vs Anthony Edwards vs League Average < 2024-25 Regular Season >")