2013-10-28 87 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