LoginSignup
BenBecky
@BenBecky (Ben Becky)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Pythonの散布図作成について

[初心者です]pythonのグラフ作成について

python始めたての初心者です。
独学でやっていて、Kaggleにたどり着いたので試しにやってみようと思ったところ、次の疑問ができました。

以下のような.csvファイルを配列として読み込み、散布図を書くことを考えています。
横軸にValue1、縦軸にValue2をとってプロットするのですが、BoolがTrueの場合のプロットだけ色を変えるなどで強調したいです。
どんな方法で記述すればよいでしょうか。

test.csv

ID, Value1, Value2, Sex, Bool
0, 2135, 54, male, True
1, 1133, 28, male, False
2, 5430, 30, female, True
...

現状自分で記述したコードは以下のようになっています。

import pandas as pd
import matplotlib.pyplot as plt
...
test = pd.read_csv("train.csv")
plt.scatter(test["Value1"],test["Value2"])
plt.show()

初めは、testの{Bool}ラベルの値によって、if文で一つずつプロットすることを考えていたのですが、
変数の型をtype()関数で調べると意味不明なものになっていて???でした。そこから先に進めていません。

0

3Answer

scatter()の引数cに、色を指定したx/yと同じ長さの配列を渡すとその通りプロットされます。

plt.scatter([0, 1, 2, 3], [0, 1, 2, 3], c=["red", "blue", "green", "black"])

1.png

したがって、np.where()関数でTrue/Falseをそれぞれ別の値に置換することで目的の結果になります。

import numpy as np

c_array = np.where(test["Bool"], "Trueの色", "Falseの色")
plt.scatter(test["Value1"], test["Value2"], c=c_array)
0

Comments

  1. @BenBecky

    Questioner
    ありがとうございます。
    numpy.where()を使うと、他にも数字の大小等でもプロットの色を変更できそうですね。
    非常に参考になりました。

私だったらseaborn使って描画します。

import pandas as pd
import seaborn as sns

test = pd.DataFrame({
    'Value1': [2135, 1133, 5430],
    'Value2': [54, 28, 30],
    'Bool': [True, False, True]
})

sns.scatterplot(data=test, x='Value1', y='Value2', hue='Bool')

ダウンロード.png

今回に限らずデータの可視化にseabornは便利なので調べてみてもいいかもです!

0

Comments

  1. @BenBecky

    Questioner
    ありがとうございます!実装できました。
    seabornもうまく使えるように勉強してみます。
This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌