【发布时间】:2023-03-09 09:36:01
【问题描述】:
我有很多点要绘制,我注意到在 matplotlib 中单独绘制它们比绘制它们需要更长的时间(根据cProfile,超过 100 倍以上)一次全部。
但是,我需要对点进行颜色编码(基于与每个点关联的数据),并且无法弄清楚如何为给定的Axes.plot() 调用绘制多种颜色。例如,我可以得到与我想要的结果类似的结果
fig, ax = matplotlib.pyplot.subplots()
rands = numpy.random.random_sample((10000,))
for x in range(10000):
ax.plot(x, rands[x], 'o', color=str(rands[x]))
matplotlib.pyplot.show()
但宁愿做一些更快的事情,比如
fig, ax = matplotlib.pyplot.subplots()
rands = numpy.random.random_sample((10000,))
# List of colors doesn't work
ax.plot(range(10000), rands, 'o', color=[str(y) for y in rands])
matplotlib.pyplot.show()
但提供一个列表作为color 的值不能以这种方式工作。
有没有办法向Axes.plot() 提供颜色列表(以及就此而言,边缘颜色、面颜色、形状、z 顺序等),以便可以自定义每个点,但所有点可以一次绘制吗?
使用Axes.scatter() 似乎已经成功了,因为它允许单独设置点颜色;但颜色似乎就这么远了。 (Axes.scatter() 的布局也完全不同。)
【问题讨论】:
-
注意:在实际应用中,点需要根据与每个点关联的其他数据着色,而不仅仅是y值(因此没有依赖于它的捷径会有所帮助)。在某些情况下更改
mark也会有所帮助(所以:mark的问题相同)。并且必须保留点的顺序。 -
您是否考虑过使用
scatter而不是plot?在那里,您还可以使用颜色图来指定颜色。 -
@BrenBarn:我继承了代码(并且无法完全控制它)。我可以简单地将我的
ax.plot()或for ... ax.plot()替换为ax.scatter()吗?那太好了! -
查看 matplotlib 文档中
scatter的文档并熟悉如何使用它。然后你会知道你是否可以使用它。很难知道你是否能够在不知道你能改变什么和不能改变什么的情况下使用它。 (例如,如果您无法控制代码,您甚至可能无法更改plot版本以按照您想要的方式工作,对吧?) -
@BrenBarn:基本上,我可以获得所有数据所需的列表(所有 x 和 y 坐标,以及它们应该具有的所有颜色,按顺序排列);我可以调用
ax上的任何方法(如示例中所示),而不是任何plot调用。但是我无法更改轴的设置方式(例如,所有对set的调用都已经发生)。
标签: python performance matplotlib plot