使用 matplotlib.pyplot 使标记尺寸尽可能小
Making the marker size as small as possible with matplotlib.pyplot
我的程序最多可以在5秒内生成2000000个点,所以我对速度没有问题。现在我正在使用 matplotlib.pyplot.scatter 将我所有的点分散在我的图表上。对于s=1
,它给了我小圆圈,但不够小,因为它没有显示出复杂的图案。当我使用 s=0.1
时,它给了我这个奇怪的标记形状:
尽管我把尺寸变小了,但它还是让标记变大了。我在整个互联网上进行了搜索,包括堆栈溢出,但他们没有说明如何进一步减小大小。不幸的是,我必须展示所有的点,不能只展示其中的随机样本。
我得出的结论是,matplotlib 是为一小部分点制作的,而不是为了绘制数百万个点。但是,如果可以缩小尺寸,请告诉我。
无论如何,就我的观点而言,我在一个数组中按顺序排列所有 x 值,在另一个数组中按顺序排列所有 y 值。有人可以建议 python 中的图形包我可以用一种尺寸非常小的方式绘制所有点,因为当我现在绘制这些点时,它只会变成一大块颜色,而不是形成复杂的设计以应有的形状。
提前感谢您的帮助!
编辑:我用来分散点的代码是:
plt.savefig(rootDir+"b"+str(Nvertices)+"_"+str(xscale)+"_"+str(yscale)+"_"+str(phi)+"_"+str(psi)+"_"+CurrentRun+"_color.png", dpi =600)
编辑:我得到了答案,我添加了 linewidths = 0
,这显着减少了点的大小,满足了我的需要。
也许您可以尝试将 linewidths
设为 0
即标记边缘的线宽。请注意下面两个图中的差异
fig, ax = plt.subplots(figsize=(6, 4))
plt.scatter(np.random.rand(100000), np.random.rand(100000), s=0.1)
fig, ax = plt.subplots(figsize=(6, 4))
plt.scatter(np.random.rand(100000), np.random.rand(100000), s=0.1, linewidths=0)
您可以在调用 scatter
时使用 marker=','
将标记设置为单个像素。
查看标记文档here
我的程序最多可以在5秒内生成2000000个点,所以我对速度没有问题。现在我正在使用 matplotlib.pyplot.scatter 将我所有的点分散在我的图表上。对于s=1
,它给了我小圆圈,但不够小,因为它没有显示出复杂的图案。当我使用 s=0.1
时,它给了我这个奇怪的标记形状:
尽管我把尺寸变小了,但它还是让标记变大了。我在整个互联网上进行了搜索,包括堆栈溢出,但他们没有说明如何进一步减小大小。不幸的是,我必须展示所有的点,不能只展示其中的随机样本。
我得出的结论是,matplotlib 是为一小部分点制作的,而不是为了绘制数百万个点。但是,如果可以缩小尺寸,请告诉我。
无论如何,就我的观点而言,我在一个数组中按顺序排列所有 x 值,在另一个数组中按顺序排列所有 y 值。有人可以建议 python 中的图形包我可以用一种尺寸非常小的方式绘制所有点,因为当我现在绘制这些点时,它只会变成一大块颜色,而不是形成复杂的设计以应有的形状。
提前感谢您的帮助!
编辑:我用来分散点的代码是:
plt.savefig(rootDir+"b"+str(Nvertices)+"_"+str(xscale)+"_"+str(yscale)+"_"+str(phi)+"_"+str(psi)+"_"+CurrentRun+"_color.png", dpi =600)
编辑:我得到了答案,我添加了 linewidths = 0
,这显着减少了点的大小,满足了我的需要。
也许您可以尝试将 linewidths
设为 0
即标记边缘的线宽。请注意下面两个图中的差异
fig, ax = plt.subplots(figsize=(6, 4))
plt.scatter(np.random.rand(100000), np.random.rand(100000), s=0.1)
fig, ax = plt.subplots(figsize=(6, 4))
plt.scatter(np.random.rand(100000), np.random.rand(100000), s=0.1, linewidths=0)
您可以在调用 scatter
时使用 marker=','
将标记设置为单个像素。
查看标记文档here