在pyplot / python中绘图时,如何强制散点实际像素值?

时间:2013-10-28 21:44:47

标签: python matplotlib scatter-plot

我拍摄了一张图片并使用OpenCv从中提取了一些功能。我想将这些点及其各自的区域(实际像素值)重新绘制到散点窗口中然后保存。不幸的是,当我绘制点数时,他们会调整大小以保持更明显。如果我放大他们调整大小。我想保存整个数字,保留像素(x,y)坐标与绘制点大小的实际比率。

例如:

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轴的单位联系起来?

1 个答案:

答案 0 :(得分: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