如果我在matplotlib中有一个返回CircleCollection的散点图:
coll = plt.scatter(rand(5), rand(5), c="k")
如何重置特定点的颜色?我注意到coll
不可迭代。我想改变已经绘制的点的面/边颜色,尽管它们已经从最初的plt.scatter
调用中获得了颜色集。怎么办呢?
例如:只需更改绘制的第二个点的颜色,例如:
coll[1].set_color("r") # this does not work, coll not indexable this way
我知道我可以在c=
中将颜色矢量传递给scatter
,但我想稍后有意重置这些点,因为当时所有点都不知道颜色。最初调用plt.scatter
。
编辑:进一步说明。我正在寻找基于不同条件在散点图中着色点的最简单方法。如果points
是一个二维数组并且你用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)
这里我重新描绘旧点,但这很麻烦,因为新点用alpha绘制,所以它不会产生预期的效果。必须重新着色点的各种条件可能很复杂,并且比初始分散时更晚发生,因此可以方便地改变现有点的颜色,而不是根据点分割点。条件并将它们全部分开绘制。
答案 0 :(得分:2)
这对我有用。您可能需要在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)
数组。
{{1}}
答案 1 :(得分:1)
答案 2 :(得分:1)
当您致电scatter
时,为每个点传递一种颜色,然后您可以直接更改_facecolors
ndarray。
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()