python - 在 matplotlib 中重置已绘制散点的点

标签 python numpy matplotlib scipy

如果我在 matplotlib 中有一个返回 CircleCollection 的散点图:

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

如何只重置特定点的颜色?我注意到 coll 不可迭代。我只想更改已绘制点的面/边缘颜色,尽管它们已经从初始 plt.scatter 调用中设置了颜色。如何做到这一点?

例如:只改变绘制的第二个点的颜色,例如:

coll[1].set_color("r") # 这不起作用,coll 不能以这种方式索引

我知道我可以在 scatter 中将颜色矢量传递给 c= 但我想稍后有意重置这些点,因为颜色未知最初调用 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 绘制的,所以它不会产生预期的效果。必须对点重新着色的各种条件可能很复杂,并且发生的时间晚于进行初始散点时的时间,因此仅能够更改现有点的颜色而不是根据基础拆分点会很方便在条件下并分别绘制它们。

最佳答案

这对我有用。可能您需要在 fig.show 之前(或代替)调用 plt.draw

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")

已更新

这是部分修改颜色的方法。如果在调用 scatter 时使用单一颜色,则需要显式扩展 colors 数组。

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)

关于python - 在 matplotlib 中重置已绘制散点的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11866872/

相关文章:

Python:键类型在字典中应该是不可变的,但为什么我可以让节点类的实例成为键?

python - 我需要比较同一数据框中的列并对它们进行排名

python - 在 python 箱线图中调整 X 轴上的间距

python - 从 pandas 数据框绘制和格式化 seaborn 图表

python - 在python中用新标签替换标签

python - 从字典列表创建一个新字典

python - 无法将文本与 PIL 文本大小正确对齐

python - 根据列表中的部分字符串过滤 Pandas (python)数据框

numpy:有限差分的差异和梯度之间的不同结果

python - 不使用 Matplotlib Python 在后台获取热图