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

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

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

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

NumPy

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

解決済

RadarChartを作成したfigureの左上にテキストを追加したい

8960
8960

総合スコア106

Matplotlib

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

NumPy

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

1回答

0リアクション

0クリップ

623閲覧

投稿2021/12/23 02:54

前提・実現したいこと

以下のようなコードで作成されたRadarChartのfigureの左上にテキストを追加したいです。
追加するテキストは、選択されたPlayerの "Player":"count" の値です。
"カウント数" + "Player":"count"値 を以下のように記載したいのですがどのように書けばよいでしょうか?

イメージは下図になります(Powerpointで追加)。

ご教授の程、よろしくお願い致します。
イメージ説明

該当のソースコード

python

#Practice RadarChart No.3 with matplotlib normalization ver. #teratail import pandas as pd import matplotlib.pyplot as plt import numpy as np import japanize_matplotlib pd.options.display.float_format="{:.1f}".format #Create a random data frame start,end = "2021/4/1","2021/4/30" dates = pd.date_range(start=start,end=end,freq="D") players = [f"Player{i}"for i in range(1,31)] N = 1000 dates = np.random.choice(dates,size=N) dates.sort() players=np.random.choice(players,size=N) df = pd.DataFrame({ "Date": dates, "Player": players, "Score0": np.random.sample(N) * 30.0 + 60.0, "Score1":np.random.sample(N) * 18.0 + 3.0, "Score2":np.random.sample(N) * 50.0 + 40.0, "Score3":np.random.sample(N) * 40.0 + 80.0, "Score4":np.random.sample(N) * 40.0 + 80.0, "Score5":np.random.sample(N) * 40.0 - 40.0, "Score6":np.random.sample(N) * 7.0 + 15.0, }) #grouping dfx = df.groupby("Player").agg({ "Player":"count", "Score0":[np.mean], "Score1":[np.mean], "Score2":[np.mean], "Score3":[np.mean], "Score4":[np.mean], "Score5":[np.mean], "Score6":[np.mean], }) #add average # dfx.loc['Average', :] = dfx.mean() #Join columns dfx.columns = [" ".join(pair) for pair in dfx.columns] # Select player # Define indicators from sklearn import preprocessing # SCORE0 SCORE0 = dfx["Score0 mean"].values[:,None] # transpose mm = preprocessing.MinMaxScaler(feature_range=(0, 10)) # Maxを10に変更 SCORE0_nor = mm.fit_transform(SCORE0) # 正規化 # 元の pandas.Series 型インスタンスに戻す SCORE0_s = pd.Series(SCORE0_nor[:,0], index=dfx["Score0 mean"].index) # Select player SCORE0_s1 = SCORE0_s["Player1"] # SCORE1 SCORE1 = dfx["Score1 mean"].values[:,None] # transpose SCORE1_nor = mm.fit_transform(SCORE1) # 正規化 # 元の pandas.Series 型インスタンスに戻す SCORE1_s = pd.Series(SCORE1_nor[:,0],index=dfx["Score1 mean"].index) # Select player SCORE1_s1 = SCORE1_s["Player1"] # SCORE2 SCORE2 = dfx["Score2 mean"].values[:,None] # transpose SCORE2_nor = mm.fit_transform(SCORE2) # 正規化 # 元の pandas.Series 型インスタンスに戻す SCORE2_s = pd.Series(SCORE2_nor[:,0],index=dfx["Score2 mean"].index) # Select player SCORE2_s1 = SCORE2_s["Player1"] # SCORE3 SCORE3 = dfx["Score3 mean"].values[:,None] # transpose SCORE3_nor = mm.fit_transform(SCORE3) # 正規化 # 元の pandas.Series 型インスタンスに戻す SCORE3_s = pd.Series(SCORE3_nor[:,0],index=dfx["Score3 mean"].index) # Select player SCORE3_s1 = SCORE3_s["Player1"] # SCORE4 SCORE4 = dfx["Score4 mean"].values[:,None] # transpose SCORE4_nor = mm.fit_transform(SCORE4) # 正規化 # 元の pandas.Series 型インスタンスに戻す SCORE4_s = pd.Series(SCORE4_nor[:,0],index=dfx["Score4 mean"].index) # Select player SCORE4_s1 = SCORE4_s["Player1"] labels = ["SCORE0","SCORE1","SCORE2", "SCORE3","SCORE4"] values = [SCORE0_s1, SCORE1_s1, SCORE2_s1, SCORE3_s1,SCORE4_s1] def plot_polar(labels, values, imgname): angles = np.linspace(0, 2 * np.pi, len(labels) + 1, endpoint=True) values = np.concatenate((values, [values[0]])) # 閉じた多角形にする fig = plt.figure(figsize=(5,10)) ax = fig.add_subplot(1,1,1,polar=True) ax.plot(angles, values, 'o-') # 外枠 ax.fill(angles, values, alpha=0.25) # 塗りつぶし ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels) # 軸ラベル ax.set_title("Player1") # グラフタイトル ax.set_rgrids([]) # 円形の目盛線を消す ax.spines['polar'].set_visible(False) # 一番外側の円を消す ax.set_theta_zero_location("N") # 始点を上(北)に変更 ax.set_theta_direction(-1) # 時計回りに変更(デフォルトの逆回り) rgrids = [0, 2, 4, 6, 8, 10] # メモリ軸の生成 for grid_value in rgrids: # 多角形の目盛線を引く grid_values = [grid_value] * (len(labels)+1) ax.plot(angles, grid_values, color="gray", linewidth=0.5) for t in rgrids: # メモリの値を表示する ax.text(x=0, y=t, s=t) # xが偏角、yが絶対値でテキストの表示場所が指定される ax.set_rlim(0, 10) # rの範囲を指定 plot_polar(labels, values, "radar.png")

試したこと

ax.text()で表示させようと試みていますが、RadarChartの場合だと座標軸がずれる?ためうまく配置できません。

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

windows11,python3.9.4,vscode

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Matplotlib

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

NumPy

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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