2017-04-24 87 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