重置matplotlib中已绘制的散点图

时间:2012-08-08 14:35:32

标签: python numpy matplotlib scipy

如果我在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绘制,所以它不会产生预期的效果。必须重新着色点的各种条件可能很复杂,并且比初始分散时更晚发生,因此可以方便地改变现有点的颜色,而不是根据点分割点。条件并将它们全部分开绘制。

3 个答案:

答案 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)

您需要使用单独的列表:

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

请看this

您还可以在c中使用与x和y相同长度的列表。

答案 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()