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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

4866閲覧

散布図に凡例を付けたい

Male_soprano

総合スコア10

Matplotlib

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

Python 3.x

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

0グッド

0クリップ

投稿2020/07/09 12:20

編集2020/07/10 04:03

前提・実現したいこと

Python初心者です.

凡例付きの散布図を作ろうとしたのですが,プロットに凡例(C列)を紐付ける方法が分かりません.
又,このデータは別のデータを大幅に改変・縮小したもので,C列の要素を手打ちする事なく分類・描画・着色できれば,と考えています.

解決の一例を示していただけますと幸いです.宜しくお願いします.

現状

イメージ説明

該当のソースコード

python

1import matplotlib.pyplot as plt 2import pandas as pd 3 4df_plot=pd.read_csv("Practice2.csv") 5 6plt.xlim(4, 10) # x軸の表示範囲 7plt.ylim(8, 14) # y軸の表示範囲 8plt.title("Graph", fontsize=10) # タイトル 9plt.xlabel("X axis", fontsize=10) # x軸ラベル 10plt.ylabel("Y axis", fontsize=10) # y軸ラベル 11plt.grid(True) # 目盛線の表示 12plt.tick_params(labelsize = 10) # 目盛線のラベルサイズ 13 14# グラフの描画 15plt.scatter(df_plot["A"], df_plot["B"], s=50, c="b", marker="D", alpha=0.5) #散布図の描画 16plt.legend(df_plot["C"], loc="lower right", fontsize=10)#凡例 17plt.show() 18 19```practice.csv 20A,B,C 214.68,11.85431,Tanaka 224.73,12.50193,Sato 234.87,12.52497,Sato 24 25### 追加情報 26macOS10.15.4, Python3

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

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

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

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

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

meg_

2020/07/09 12:47

日本語を表示させるには日本語フォントを指定しましょう。「matplotlib 日本語」などで検索すれば方法は見つかります。
Male_soprano

2020/07/10 00:25

有難うございます.実は質問を送信する前に気付いて変更しましたが,変更が反映されなかったようです. 問題文を訂正しましたので,ご確認いただけますと幸いです.宜しくお願いします.
meg_

2020/07/10 02:00

新しい画像でも凡例が文字化けしているように見えます。
Male_soprano

2020/07/10 04:03

データを差し替えました.ご確認いただけますと幸いです.
guest

回答2

0

Python

1plt.xlim(4, 10) # x軸の表示範囲 2plt.ylim(8, 14) # y軸の表示範囲 3plt.title("Graph", fontsize=10) # タイトル 4plt.xlabel("X axis", fontsize=10) # x軸ラベル 5plt.ylabel("Y axis", fontsize=10) # y軸ラベル 6plt.grid(True) # 目盛線の表示 7plt.tick_params(labelsize = 10) # 目盛線のラベルサイズ 8 9# グラフの描画 10for i, name in enumerate(df_plot["C"].unique()): 11 plt.scatter(df_plot.loc[df_plot["C"] == name, "A"], df_plot.loc[df_plot["C"] == name, "B"], s=50, c=[plt.get_cmap('tab10').colors[i]], marker="D", alpha=0.5) 12 13plt.legend(df_plot["C"], loc="lower right", fontsize=10)#凡例 14plt.show()

イメージ説明

投稿2020/07/10 12:15

meg_

総合スコア10760

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

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

guest

0

ベストアンサー

matplotlib のデフォルトフォントは英字フォントなので、日本語は表示できません。

以下の手順で日本語フォントを設定すれば、反映されます。
(Jupyter Notebook の場合、Notebook を再起動してください)

matplotlib - コピペするだけで matplotlib を日本語化する方法 (Windows / Ubuntu 対応) - pystyle

追記

点ごとに凡例を用意するということでしょうか?

python

1import matplotlib.pyplot as plt 2import pandas as pd 3 4df = pd.read_csv("sample.csv") 5 6plt.xlim(4, 10) # x軸の表示範囲 7plt.ylim(8, 14) # y軸の表示範囲 8plt.title("Graph", fontsize=10) # タイトル 9plt.xlabel("X axis", fontsize=10) # x軸ラベル 10plt.ylabel("Y axis", fontsize=10) # y軸ラベル 11plt.grid(True) # 目盛線の表示 12plt.tick_params(labelsize=10) # 目盛線のラベルサイズ 13 14# グラフの描画 15for row in df.itertuples(): 16 plt.scatter(row.A, row.B, s=50, marker="D", alpha=0.7, label=row.C) 17 18plt.legend(loc="lower right", fontsize=10) 19plt.show()

イメージ説明

追記

seaborn.scatterplot() を使うと簡単です。
seaborn は pip install seaborn でインストールできます。

使い方

python

1seaborn.scatterplot(x="X座標の列名", y="Y座標の列名", hue="凡例の列名", data=DataFrame の変数, ax=ax)

seaborn.scatterplot — seaborn 0.10.1 documentation

↓ サンプルコード

python

1import matplotlib.pyplot as plt 2import pandas as pd 3import seaborn as sns 4 5df = pd.read_csv("sample.csv") 6 7fig, ax = plt.subplots() 8ax.set_xlim(4, 10) # x軸の表示範囲 9ax.set_ylim(8, 14) # y軸の表示範囲 10ax.set_title("Graph", fontsize=10) # タイトル 11ax.set_xlabel("X axis", fontsize=10) # x軸ラベル 12ax.set_ylabel("Y axis", fontsize=10) # y軸ラベル 13ax.grid() # 目盛線の表示 14ax.tick_params(labelsize=10) # 目盛線のラベルサイズ 15 16sns.scatterplot(x="A", y="B", hue="C", data=df, ax=ax) 17 18plt.show() 19```![イメージ説明](ab1de8a518adae53e442d6482b6fd492.jpeg)

投稿2020/07/09 13:29

編集2020/07/10 12:31
tiitoi

総合スコア21956

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

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

Male_soprano

2020/07/10 00:25

有難うございます.実は質問を送信する前に気付いて変更しましたが,変更が反映されなかったようです. 問題文を訂正しましたので,ご確認いただけますと幸いです.宜しくお願いします.
tiitoi

2020/07/10 01:54

追記しました。点ごとに凡例を用意するということであっていますか?
Male_soprano

2020/07/10 03:54

有難うございます.佐藤を同じ色にしたいのです. かつ,このデータは訳500行にわたるデータを改変・縮小したもので,実際にC行の要素を手打ちするのは避けたいと考えています.
tiitoi

2020/07/10 03:58

同じ色にした場合判例で区別できなくなると思いますが、どういう図を想像されてますか?
Male_soprano

2020/07/10 04:08

例えばSato(データを差し替えました)でも,上記の緑の凡例が消えて,緑のプロットも黄色になっていたら嬉しいです 高次の生物分類毎の生体分子の性質を可視化したいので,区別できていなくても大丈夫です
tiitoi

2020/07/10 12:09

意味がわかりました。C列の値が同じ凡例は統一したいということですね。 追記したように seaborn.scatterplot() を使うと簡単にできます。 seaborn は matplotlib を DataFrame の描画用に使いやすくしたライブラリです。
Male_soprano

2020/07/10 15:59

分かりました.有難うございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問