質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1376閲覧

日付別に色分けされたScatterPlotを作成したい

8960

総合スコア108

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2022/04/03 03:34

編集2022/04/03 03:36

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Colormap は RdYlGn にしていますが、そこはお好みで。

python

1grouped = df.groupby("date") 2colors = cm.RdYlGn(np.linspace(0, 1, len(grouped))) 3for i, (key, group) in enumerate(grouped): 4 group.plot(ax=ax,kind="scatter",x="Score1",y="Score2",label=key,color=[colors[i]],s=80)

投稿2022/04/03 04:39

melian

総合スコア19805

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/04/03 05:37

以下の様にしてみて下さい。ただし、カラーバーのラベルは日付ではなく数値のままになります。 fig.colorbar(ax.collections[0])
8960

2022/04/03 05:47

ありがとうございます。 ラベルが日付になるようにもうちょっとだけ調べてみます。 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問