2013-10-28 91 views
1

我已經拍攝了一張圖片,並使用OpenCv從中提取了一些功能。我想將這些點和它們各自的區域(它們是實像素值)重新繪製到散射窗口中,然後保存它。不幸的是,當我繪製點時,他們調整大小以保持更清晰。如果我放大,他們調整大小。我想保存整個圖形,保留像素(x,y)座標的實際比例與繪製點的大小。在pyplot/python中繪圖時,如何強制散點實際像素值?

例如:

import matplotlib.pyplot as plt 
x=[5000,10000,20000] 
y=[20000,10000,5000] 
area_in_pixels=[100,200,100] 
scatter(x,y,s=area_in_pixels) 

謹以此產生圖像上的小點。他們應該跨越10 xy單位。然而,它產生的點很大,並且似乎跨越1000個xy單位。

我試着調整圖像大小:

plt.figure(figsize=(10,10)) 

這似乎調整相對於他們的一點點位置的點。但我不確定我會選擇什麼比例來使其準確。 plt.figsave上的DPI設置似乎會使保存的圖像變大,但不會改變相對光點尺寸。

問另一種方式,是否有另一種方法將點^ 2中的s與實數或x-y軸的單位聯繫起來?

+0

有使用'plt.imshow'考慮?這是[教程](http://matplotlib.org/users/image_tutorial.html)。 – wflynny

+0

我在這裏有一個相關的問題:http://stackoverflow.com/questions/15160123/adding-a-background-image-to-a-plot-with-known-corner-coordinates – YXD

回答

4

您可以使用patches創建相對於數據座標大小的標記。

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


xData=[5000,10000,20000, 15000] 
yData=[20000,10000,5000, 15000] 
radius_in_pixels=[100,200,100, 1000] # Circle takes radius as an argument. You could convert from area. 


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

for x, y, r in zip(xData, yData, radius_in_pixels): 
    ax.add_artist(Circle(xy=(x, y), radius = r))  

plt.xlim(0, max(xData) + 200) 
plt.ylim(0, max(yData) + 200) 
plt.show() 

scatter plot using circle patches