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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

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

Python 3.x

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

pandas

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

Q&A

解決済

1回答

1676閲覧

Pythonで年度別に色分けされたScatterPlotを作成したい。

8960

総合スコア108

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

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

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2022/04/02 08:20

編集2022/04/03 01:20

前提

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

1## SeriesData 2import pandas as pd 3import numpy as np 4import matplotlib.pyplot as plt 5 6pd.options.display.float_format="{:.2f}".format 7 8#Create a random data frame 9start,end = "2021/4/1","2022/4/1" 10dates = pd.date_range(start=start,end=end,freq="D") 11details = ["Game","Practice"] 12players = [f"Player{i}"for i in range(1,31)] 13N = 1000 14dates = np.random.choice(dates,size=N) 15dates.sort() 16details = np.random.choice(details,size=N) 17players=np.random.choice(players,size=N) 18df = pd.DataFrame({ 19 "Date": dates, 20 "Details":details, 21 "Player": players, 22 "Score1":np.random.sample(N) * 30.0 + 100.0, 23 "Score2":np.random.sample(N) * 40.0 - 10.0 , 24}) 25 26df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d') 27df['Year'] = df['Date'].dt.strftime('%Y') 28df["Year"] = df["Year"].astype(int) 29 30# select Player 31Player = "Player1" 32# select SwingDetails 33Details = "Practice" 34#query by selects 35df = df.query(f'Player=="{Player}"') 36df = df.query(f'Details=="{Details}"') 37# データの選択 38select_item1 = "Score1" 39select_item2 = "Score2" 40colors = {"2022":"red","2021":"blue"} 41# Create figure 42fig,ax = plt.subplots(figsize=(15,10)) 43df.plot.scatter(x=select_item1,y=select_item2,ax=ax,s=80,marker="o",c=df["Year"].map(colors)) 44#画像サイズ、軸サイズ調整 45ax.axis([90,130,-20,30]) 46#グラフのラベル設定 47ax.set_xlabel("Score1",fontsize=15) 48ax.set_ylabel("Score2",fontsize=15) 49#プロットのグリッド線 50plt.grid(True,linestyle = "dotted") 51plt.show 52 53df

補足情報(FW/ツールのバージョンなど)

python3.9、VSCode

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

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

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

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

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

guest

回答1

0

ベストアンサー

Yearint 型なので。

python

1#colors = {"2022":"red","2021":"blue"} 2colors = {2022:"red",2021:"blue"}

投稿2022/04/02 09:57

melian

総合スコア19798

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

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

8960

2022/04/03 01:06

なるほど!すっきりしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問