2014-01-21 61 views
1

我想繪製一個網格,其中網格中的每個節點都由一個點繪製,並帶有特定的顏色代碼(取自存儲在節點中的矢量)。這裏查找散點圖的正確標記大小

my grid

電網取決於我運行的模擬的大小而變化的大小。我還沒有弄清楚畫布大小和標記大小之間的關係。現在我使用下面的公式:

markersize = (figsize*figsize*dpi*dpi)/(xdim*ydim) 
plt.scatter(X, Y, s=markersize/3, marker='s', c=Z, cmap=cm.rainbow) 
plt.show() 

即我由網格的維數的平方和sigsize的DPI(使用15和80分別地),和除法。最後,我發現這個工作,我除以3。

但我還沒有能夠解決如何分析得到正確的標記大小。我想要的是一個網格,每個方格使用盡可能多的空間,但沒有在其他節點的空間上「infringinig」,以便標記重疊。

據我所知,figsize以英寸給出。 dpi是 - 每英寸點數,並且標記大小用 - 點指定。如果點與點相同,那麼您將在每個座標軸上具有圖形大小的點。 ydim是我網格中節點的數量。然後將ydim分爲pow(dpi)和xdim(ydim),然後給出每個節點的點數,以及我認爲的每個標記的正確大小。但是這使得標記太大了。我潛伏了3,它對我通常跑步的體型幾乎起作用,但不是全部。 (我猜猜點和點不一樣,但關係是什麼?)

如何解決這個問題的正確答案?理想情況下,我想要一幅非常細膩的照片,我可以放大某些區域以更細緻地觀察顏色細微差別。

+0

那麼如果你有一個各向同性的數據,其中fig_size_x = fig_size_y你可以這樣做: 'marker_size = fig_x * fig_dpi/xdim。 ax.scatter(x,y,z,marker ='s',c = areaImg [x,y,z],s = marker_size,zdir ='z', cmap = plt.cm.rainbow)'。 然後爲了得到清晰的結構,您可以使用[interpolation](http://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html) – bazilevs31

回答

0

如果要精確控制標記大小並使其與圖形成比例,則可以使用patch而不是常規標記。這裏有一個例子:

from matplotlib import pyplot as plt 
from matplotlib.patches import Circle 

x = [1, 2, 3, 4, 5] 
y = [1, 3, 1, 2, 4] 
colors = [10, 215, 30, 100] 

cmap = plt.cm.jet 
fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 

for (x, y, c) in zip(x, y, colors): 
    ax.add_artist(Circle(xy=(x, y), radius=0.5, color=cmap(c)))  

ax.set_xlim(0, 6) 
ax.set_ylim(0, 6) 
plt.show() 

你也可以使用一個矩形而不是一個圓。

+0

感謝這個建議。但我認爲迭代所有這些點對我來說太慢了。有什麼辦法可以精確計算散點圖的標記大小嗎? – user1603472