前提
Pythonでデータ分析をしている初学者です。
日付別で色分けされたScatterPlotを作成したいです。
イメージはhttps://community.plotly.com/t/datetime-as-color-variable-for-scatter/35078/2
↑のTimeStamp(時刻データ)ではなく、Date(日付)版です。
このページの様に、カラーバーも表示されて日付の進行とともにデータの変化もわかりやすく可視化されるのが理想です。
以前に作成した年度別の色分け版を編集して日付版に修正中なのですが
年度別とは違い日付だと最低でも365色必要になるため、カラーマップから自動で色付けされるような書き方が良いのかなと思うのですが、「color =?」のところ、なかなか上手く書くことが出来ません。
詳しい方、どうかご教授・ご提案の程よろしくお願いいたします。
達成したいこと
日付別で色分けされたScatterPlotを作成したい。
該当のソースコード
Python
1## SeriesData_daily 2import pandas as pd 3import numpy as np 4import matplotlib.pyplot as plt 5import matplotlib.cm as cm 6 7pd.options.display.float_format="{:.2f}".format 8 9#Create a random data frame 10start,end = "2022/4/1","2022/4/10" 11dates = pd.date_range(start=start,end=end,freq="D") 12details = ["Game","Practice"] 13players = [f"Player{i}"for i in range(1,31)] 14N = 1000 15dates = np.random.choice(dates,size=N) 16dates.sort() 17details = np.random.choice(details,size=N) 18players=np.random.choice(players,size=N) 19df = pd.DataFrame({ 20 "Date": dates, 21 "Details":details, 22 "Player": players, 23 "Score1":np.random.sample(N) * 30.0 + 100.0, 24 "Score2":np.random.sample(N) * 40.0 - 10.0 , 25}) 26 27df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d') 28df['Year'] = df['Date'].dt.strftime('%Y') 29df['date'] = df['Date'].dt.strftime('%m/%d') 30 31# select Year 32Year = "2022" 33# select Player 34Player = "Player1" 35# select SwingDetails 36Details = "Practice" 37 38#query by selects 39df = df.query(f'Year=="{Year}"') 40df = df.query(f'Player=="{Player}"') 41df = df.query(f'Details=="{Details}"') 42# データの選択 43select_item1 = "Score1" 44select_item2 = "Score2" 45# Create figure 46fig,ax = plt.subplots(figsize=(15,10)) 47#色の設定&Plot 48grouped = df.groupby("date") 49colors = ? 50for key, group in grouped: 51 group.plot(ax=ax,kind="scatter",x="Score1",y="Score2",label=key,color=colors[key],s=80) 52#画像サイズ、軸サイズ調整 53ax.axis([90,130,-20,30]) 54#グラフのタイトル・ラベル設定 55ax.set_title(f"{Year}_{Player}_{Details}",fontsize=15) 56ax.set_xlabel("Score1",fontsize=15) 57ax.set_ylabel("Score2",fontsize=15) 58# 凡例の表示 59flg=15 60ax.legend(loc='upper left',fontsize=flg) 61#プロットのグリッド線 62ax.grid(True,linestyle = "dotted") 63plt.show 64 65df
補足情報(FW/ツールのバージョンなど)
python3.9、VSCode

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/03 05:33 編集
2022/04/03 05:37
2022/04/03 05:47