前提
Pythonでデータ分析をしている初学者です。
BaseballSavantというホープページからデータを引っ張ってきて分析しています。
以下のコード(長文のため途中から添付しています)で
投手大谷翔平のボールの変化を2021-2022間で比較するScatterPlotを作成しています。
グラフの色分けは変化球の種類別で行っています。この場合、大谷は「Sinker」や「Changeup」、今季に関しては「Cutter」のデータがありませんが、凡例には入ってしまってます。
いろいろな投手(「Sinker」や「Changeup」のデータがある投手)や今後大谷が「Sinker」や「Changeup」を投球したときにも使用したいコードですので、
pitch_colors = {"4-Seam Fastball":"b","Sinker":"c","Slider":"r","Split-Finger":"g","Curveball":"pink","Cutter":"y","Changeup":"lightgreen"}
↑ここのところはなるべくいじりたくないのですが
この状態のままで、グラフには参照するデータにラベリングされているものしか凡例に反映されないようにするにはどうしたらよいでしょうか?
非常に断片的で不十分なコード・説明になってしまってますが
わかる方是非ご教授お願いいたします。
発生している問題
必要のないラベルまで凡例に記載されてしまう
該当のソースコード
Python
1# Select player 2player = "Ohtani, Shohei" 3df = df[df["Player"]==f"{player}"] 4 5#画像サイズ、軸サイズ調整 6plt.figure(figsize=(25,11)) 7#各球種の色を定義づけ 8pitch_colors = {"4-Seam Fastball":"b","Sinker":"c","Slider":"r","Split-Finger":"g","Curveball":"pink","Cutter":"y","Changeup":"lightgreen"} 9ax1 = plt.subplot(1,2,1) 10ax2 = plt.subplot(1,2,2) 11# 2021 12season = 2021 13df_2021 = df.query(f'Year=={season}') 14# make ScatterPlot 15ax1.axis([-70,70,-70,70]) 16x = df_2021[["Horz Break"]] 17y = df_2021[["Induced Vert Break"]] 18#各球種を色別でplot 19for k in pitch_colors: 20 df_2021[df_2021['Pitch Type'] == k].plot.scatter(x='Horz Break', y='Induced Vert Break', marker='o', c=pitch_colors[k], s = 50, label=k, ax=ax1) 21#グラフのラベル設定 22ax1.set_xlabel("横変化量(cm)",fontsize=15) 23ax1.set_ylabel("縦変化量(cm)",fontsize=15) 24#プロットのグリッド線 25ax1.grid(True,linestyle = "dotted") 26# adding vertical line in data co-ordinates 27ax1.axvline(0, c='silver', ls='-') 28# adding horizontal line in data co-ordinates 29ax1.axhline(0, c='silver', ls='-') 30ax1.set_title(f"{season}",fontsize=15) 31#凡例の表示 32flg=12 33ax1.legend(loc='upper left',fontsize=flg,title='Pitch Type') 34 35# 2022 36season = 2022 37df_2022 = df.query(f'Year=={season}') 38# make ScatterPlot 39ax2.axis([-70,70,-70,70]) 40x = df_2022[["Horz Break"]] 41y = df_2022[["Induced Vert Break"]] 42#各球種を色別でplot 43for k in pitch_colors: 44 df_2022[df_2022['Pitch Type'] == k].plot.scatter(x='Horz Break', y='Induced Vert Break', marker='o', c=pitch_colors[k], s = 50, label=k, ax=ax2) 45#グラフのラベル設定 46ax2.set_xlabel("横変化量(cm)",fontsize=15) 47ax2.set_ylabel("縦変化量(cm)",fontsize=15) 48#プロットのグリッド線 49ax2.grid(True,linestyle = "dotted") 50# adding vertical line in data co-ordinates 51ax2.axvline(0, c='silver', ls='-') 52# adding horizontal line in data co-ordinates 53ax2.axhline(0, c='silver', ls='-') 54ax2.set_title(f"{season}",fontsize=15) 55#凡例の表示 56flg=12 57ax2.legend(loc='upper left',fontsize=flg,title='Pitch Type') 58 59plt.show
補足情報(FW/ツールのバージョンなど)
python3.9、VSCode

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/04/14 14:14