Matplotlib scatterplot; 3番目の変数の関数としての色


152

(matplotlibを使用して)散布図を作成し、点を3番目の変数に従ってシェーディングします。私はこれに非常に近づきました:

plt.scatter(w, M, c=p, marker='s')

ここで、wとMはデータポイントであり、pはシェーディングしたい変数です。
ただし、カラーではなくグレースケールで実行したい。誰か助けてもらえますか?

回答:


156

色を手動で設定する必要はありません。代わりに、グレースケールカラーマップを指定します...

import numpy as np
import matplotlib.pyplot as plt

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()

plt.show()

ここに画像の説明を入力してください

または、より広い範囲のカラーマップが必要な場合は、cmapkwargをに指定することもできますscatter。これらのいずれかの反転バージョンを使用するには_r、それらのいずれかの「」バージョンを指定するだけです。例えばのgray_r代わりにgray。いくつかの異なるグレースケールカラーマッププリ製(例えばありgraygist_yargbinary、など)。

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()

1
ありがとう!とにかく、総重量の一定量を含むこれらの点の周りに輪郭を描くことはありますか?
トーマス・コレット

6
mpl.cmとして直接入手することもできますplt.cm
heltonbiker 2012

@Thomas Collet:等高線を描画する場合は、データをポイントから2Dマトリックスに補間し、plt.contour()orまたはplt.contourf()- を使用してプロットする必要がありますが、これは別の質問です
Zak

凡例にラベルを追加するにはどうすればよいですか?この場合、連続した数字の場合は、カラーバーを使用すると思います。離散値の場合はどうですか?たとえば、3つのカテゴリの凡例に3つのラベルを追加できますか?
ネイト、

26

matplotlibでは、灰色は0〜1の数値の文字列として指定できます。
例えばc = '0.1'

次に、3番目の変数をこの範囲内の値に変換し、それを使用してポイントに色を付けることができます。
次の例では、色を決定する値としてポイントのy位置を使用しました。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]

color = [str(item/255.) for item in y]

plt.scatter(x, y, s=500, c=color)

plt.show()

ここに画像の説明を入力してください


3
レコードについて、(n、4)形状の配列をc4番目の列にアルファ値を指定して引数として指定すると、ALPHAをカラーマップとして適用できます。3番目の変数は、Zは、ある場合にshape=(n,1)は、 colors = numpy.hstack((numpy.zeros_like(z), numpy.zeros_like(z), numpy.ones_like(z), z/z.max()))(それが微調整することができ、もちろん)非常に良い効果を与えます。
heltonbiker 2013

エラーが表示されます:「rgbaシーケンスの長さは3または4のいずれかである必要があります」
MattCochrane

1
@MattClimbs例のように、plt.scatterではなく、plt.plotを呼び出していると思います。
smashbro 2016

このプロットにカラーバーをどのように追加しますか?
FaCoffee

2
@FaCoffee plt.colorbar()がそれを行います
Mathew Savage

10

場合によっては、x値のケースに基づいて正確に色プロットする必要があります。たとえば、3種類の変数といくつかのデータポイントを含むデータフレームがあるとします。そして、あなたは次のことをしたいのですが、

  • 赤の物理変数「A」に対応する点をプロットします。
  • 青色の物理変数「B」に対応する点をプロットします。
  • 緑の物理変数「C」に対応する点をプロットします。

この場合、x値を対応するカラー名にリストとしてマッピングし、そのリストをplt.scatterコマンドに渡すために、short関数に書き込む必要がある場合があります。

x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]

# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
    cols=[]
    for l in lst:
        if l=='A':
            cols.append('red')
        elif l=='B':
            cols.append('blue')
        else:
            cols.append('green')
    return cols
# Create the colors list using the function above
cols=pltcolor(x)

plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()

x変数の関数としての散布図のカラーリング


このプロットのカラーバーを作成する方法
Maryam Rahmani Moghaddam
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.