4

CircleCollectionを返すmatplotlibに散布図がある場合:

coll = plt.scatter(rand(5), rand(5), c="k")

特定のポイントの色をリセットするにはどうすればよいですか?coll私はそれが反復可能ではないことに気づきました。plt.scatter最初の呼び出しからすでに色が設定されていますが、すでにプロットされているポイントの面/エッジの色を変更したいだけです。これはどのように行うことができますか?

例:プロットされた2番目のポイントの色を変更するだけです。例:

coll[1].set_color("r") # this does not work, coll not indexable this way

c=色のベクトルをinに渡すことができることは知っていますが、が最初に呼び出さscatterれた時点ではすべてのポイントの色がわからないため、後で意図的にポイントをリセットしたいと思います。plt.scatter

編集:詳細な説明。さまざまな条件に基づいて、スキャッター内のポイントに色を付ける最も簡単な方法を探しています。pointsが2次元配列であり、を使用してプロットする場合は、後で特定の条件に基づいてプロットすると便利scatter(points[:, 0], points[:, 1], c-"k")です。

# replot certain points in red with alpha
selected = points[:, 0] > 0.5
plt.scatter(selected[:, 0], selected[:, 1], c="r", alpha=0.5)

ここでは古いポイントを再プロットしますが、新しいポイントはアルファでプロットされているため、これは面倒です。そのため、目的の効果が得られません。ポイントの色を変更する必要があるさまざまな条件は複雑で、最初のスキャッターが作成されたときよりも遅く発生する可能性があるため、ポイントを分割するのではなく、既存のポイントの色を変更できるようにするだけで便利です。条件に基づいて、それらをすべて別々にプロットします。

4

3 に答える 3

3

これは私のために働きます。plt.drawおそらく、前に(または代わりに)呼び出す必要がありますfig.show

coll = plt.scatter(rand(5), rand(5), c="k")
fig = plt.gcf()
fig.show()  # or fig.savefig("a.png")

coll.set_color(['b', 'g', 'r', 'y', 'k'])
fig.show()  # or fig.savefig("b.png")

更新しました

これは、色を部分的に変更する方法です。colorsを呼び出すときに単一の色を使用する場合は、配列を明示的に拡張する必要がありますscatter

num = 5
coll = plt.scatter(rand(num), rand(num), c='k')
# coll = plt.scatter(rand(num), rand(num), c=['b', 'g', 'r', 'y', 'k'])
fig = plt.gcf()
fig.show()

colors = coll.get_facecolor()
if colors.shape[0] == 1:
    newcolors = np.tile(colors, (num, 1))
else:
    newcolors = colors
newcolors[0] = [0, 0.75, 0.75, 1]
coll.set_color(newcolors)
于 2012-08-08T15:59:00.840 に答える
2

を呼び出すときはscatter、すべてのポイントに色を渡すと、_facecolorsndarrayを直接変更できます。

from matplotlib import pyplot as plt
from matplotlib.collections import PathCollection
from numpy.random import rand
x = rand(5)
y = rand(5)
coll = plt.scatter(x, y, c=["k"]*len(x)) # must set color for every point
coll._facecolors[2,:] = (1, 0, 0, 1)
plt.show()
于 2012-08-09T00:38:32.277 に答える
1

別のリストを使用する必要があります。

plt.scatter(x1, y1, c='b')
plt.scatter(x2, y2, c='k')

これを見てください。

xおよびyと同じ長さのリストをcに含めることもできます。

于 2012-08-08T14:46:18.497 に答える