2017-04-24 83 views
3

当绘制非常接近的点时,有时具有不同值的点似乎具有相同的值。在下图中,所有六个点都有不同的纵坐标值,但看起来好像点2,3和点4,5,6具有相同的值。增加点绘图精度

我知道这是解决问题(我不能因为这里没有详细说明的原因而增加)。不过,是否有可能告诉matplotlib更精确地绘制这些点?

enter image description here

MWE:

import matplotlib 
from matplotlib import pyplot as plt 

coor = [[0.5,0.525,0.55,0.575,0.6,0.625],[0.5,0.501,0.502,0.503,0.504,0.505]] 

fig = plt.figure(figsize=(3.5,3.5)) 
plts=fig.add_subplot(1,1,1) 
fig.subplots_adjust(left=0.01, right=0.99, bottom=0.01, top=0.99, hspace=0, wspace=0) 

plts.set_xlim([0,1]) 
plts.set_ylim([0,1]) 
plts.get_xaxis().set_visible(False) 
plts.get_yaxis().set_visible(False) 

grph = plts.scatter(coor[0],coor[1],facecolor='k',marker='o',lw=0,s=25) 
fig.savefig('test.png', bbox_inches='tight', dpi=100) 
+0

更改轴限制? – DavidG

+0

@DavidG还有其他一些点可以填补剩下的情节,所以我不能改变限制(但在这里我只提出了有问题的那个) – Pygmalion

+0

设置'marker ='+''可能看起来更精确,但并不是真的有你可以做到解决限制。 – kazemakase

回答

3

的问题来自100 DPI的resoltion。由于点的位置需要是1个像素的倍数,因此它们的位置看起来是离散的。

您当然可以在保存图片时增加dpi。以下是原始图片,保存为100 dpi,显示不良行为。

enter image description here

以下是图片保存300个dpi和事后向下取样,以相同大小的原始图片。

enter image description here

如果您选择的数字大小,使得 figsize*saved_dpi/desired_dpi == integer结果会更好;但你需要避免使用bbox_inches='tight'

+0

好吧,我用PNG作为例子,但我实际上做的是使用ArtistAnimation制作视频。制作视频时,是否可以提高分辨率并强制ArtistAnimation降低采样率? – Pygmalion

+0

如果我理解你的话,'matplotlib'的像素位置贬低是我们不能反对的。也许删除像素位置的discreditation会是一个很好的'matplotlib'增强请求? – Pygmalion

+0

缩减采样需要由用于保存动画的FileWriter来完成,可以通过子类化和使用PIL,或者通过为外部写入器设置相应的参数来完成。根据您保存的格式,这可能实际上很容易或很难。如果你有matplotlib的功能请求,你可以在[GitHub网站](https://github.com/matplotlib/matplotlib/issues)上询问。 – ImportanceOfBeingErnest