前提
Pythonでデータ分析をしている初学者です。
ScatterPlotを作成したいのですが、UserWariningが表示される&グラフに点が表示されません。
作成したいScatterPlotは以下のようなものになります。
・年度で色分けをしたい(例:2021→青、2022→赤)
・「Player」、「Details」でそれぞれクエリ。
・X軸が「Score1」、Y軸が「Score2」。
データフレーム自体には問題はなさそうでした。
色分けをしない= c=df["Year"].map(colors) を消すと点自体は散布してくれますが、追加すると空白のグラフになります。
UserWariningについて、少し検索しましたがあまりピンとくるものがありませんでした。
何が原因か、ご教授の程よろしくお願いいたします。
達成したいこと
Pythonで年度別に色分けされたScatterPlotを作成したい。
参考:https://kanoki.org/2020/08/30/matplotlib-scatter-plot-color-by-category-in-python/
発生している問題・エラーメッセージ
<__array_function__ internals>:5: UserWarning: Warning: converting a masked element to nan. C:\Users\DELL\Anaconda3\lib\site-packages\numpy\core\_asarray.py:102: UserWarning: Warning: converting a masked element to nan. return array(a, dtype, copy=False, order=order)
該当のソースコード
Python
## SeriesData import pandas as pd import numpy as np import matplotlib.pyplot as plt pd.options.display.float_format="{:.2f}".format #Create a random data frame start,end = "2021/4/1","2022/4/1" dates = pd.date_range(start=start,end=end,freq="D") details = ["Game","Practice"] players = [f"Player{i}"for i in range(1,31)] N = 1000 dates = np.random.choice(dates,size=N) dates.sort() details = np.random.choice(details,size=N) players=np.random.choice(players,size=N) df = pd.DataFrame({ "Date": dates, "Details":details, "Player": players, "Score1":np.random.sample(N) * 30.0 + 100.0, "Score2":np.random.sample(N) * 40.0 - 10.0 , }) df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d') df['Year'] = df['Date'].dt.strftime('%Y') df["Year"] = df["Year"].astype(int) # select Player Player = "Player1" # select SwingDetails Details = "Practice" #query by selects df = df.query(f'Player=="{Player}"') df = df.query(f'Details=="{Details}"') # データの選択 select_item1 = "Score1" select_item2 = "Score2" colors = {"2022":"red","2021":"blue"} # Create figure fig,ax = plt.subplots(figsize=(15,10)) df.plot.scatter(x=select_item1,y=select_item2,ax=ax,s=80,marker="o",c=df["Year"].map(colors)) #画像サイズ、軸サイズ調整 ax.axis([90,130,-20,30]) #グラフのラベル設定 ax.set_xlabel("Score1",fontsize=15) ax.set_ylabel("Score2",fontsize=15) #プロットのグリッド線 plt.grid(True,linestyle = "dotted") plt.show df
補足情報(FW/ツールのバージョンなど)
python3.9、VSCode
まだ回答がついていません
会員登録して回答してみよう