oro*_*ome 6 python performance plot matplotlib
我有很多点要绘制,并且我注意到在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()
Run Code Online (Sandbox Code Playgroud)
但宁愿做一些更快的事情,比如
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()
Run Code Online (Sandbox Code Playgroud)
但提供一个列表作为 的值color并不以这种方式工作。
有没有办法提供颜色列表(就此而言,边缘颜色、面颜色、形状、z 顺序等),以便Axes.plot()可以自定义每个点,但可以一次绘制所有点?
使用Axes.scatter()似乎已经达到了目的,因为它允许单独设置点颜色;但颜色似乎就到此为止了。(Axes.scatter()图形的布局也完全不同。)
对我来说,直接创建对象(补丁)大约快了 5 倍。为了说明该示例,我更改了限制(必须使用此方法手动设置)。圆圈本身是用 绘制的matplotlib.path.Path.circle。最小工作示例:
import numpy as np
import pylab as plt
from matplotlib.patches import Circle
from matplotlib.collections import PatchCollection
fig, ax = plt.subplots(figsize=(10,10))
rands = np.random.random_sample((N,))
patches = []
colors = []
for x in range(N):
C = Circle((x/float(N), rands[x]), .01)
colors.append([rands[x],rands[x],rands[x]])
patches.append(C)
plt.axis('equal')
ax.set_xlim(0,1)
ax.set_ylim(0,1)
collection = PatchCollection(patches)
collection.set_facecolor(colors)
ax.add_collection(collection)
plt.show()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
4414 次 |
| 最近记录: |