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

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

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

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

NumPy

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

Python 3.x

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

pandas

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

解決済

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

8960
8960

総合スコア105

Matplotlib

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

NumPy

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

Python 3.x

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

pandas

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

1回答

0評価

0クリップ

232閲覧

投稿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

## 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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Matplotlib

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

NumPy

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

Python 3.x

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

pandas

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