Python-在散点上绘制已知大小的矩形

时间:2018-08-28 11:12:01

标签: python scatter-plot

我有几点要点:

a = ([126, 237, 116, 15, 136, 348, 227, 247, 106, 5, -96, 25, 146], [117, 127, 228, 107, 6, 137, 238, 16, 339, 218, 97, -4, -105])

我像这样绘制散点图:

    fig = plt.figure(figsize = (15,6))
    ax = fig.add_subplot(111)
    ax.scatter(a[0], a[1], color = 'red', s=binradius)

是哪个情节:

enter image description here

-

我用一张图片覆盖了该图片,其中每个散布点都有一个球形斑点。我想拟合该斑点,所以我在散点周围定义了一个矩形区域以进行拟合。

我想在绘图上看到这个矩形,以可视方式查看它们是否足够大以包围斑点,就像这样:

enter image description here

我可以用scatter吗?还是我有其他方法可以做到?

2 个答案:

答案 0 :(得分:4)

尽管@ ralf-htp的回答很干净,并且使用scatter,但据我所知,标记的比例用points表示(例如,见here)。此外,如果放大,自定义标记将不会更改大小。

也许这正是您想要的。如果不是这样,使用单独的Rectangle对象也可以很好地解决问题。这使您可以指定数据单位的宽度和高度而不是点,并且可以放大。如果需要,通过设置angle属性,也可以很容易地应用旋转:

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

# Your data
a = ([126, 237, 116, 15, 136, 348, 227, 247, 106, 5, -96, 25, 146],
     [117, 127, 228, 107, 6, 137, 238, 16, 339, 218, 97, -4, -105])

# Your scatter plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(a[0], a[1], color = 'red', s=10)

# Add rectangles
width = 30
height = 20
a_zipped = zip(*a)
for a_x, a_y in a_zipped:
    ax.add_patch(Rectangle(xy=(a_x-width/2, a_y-height/2) ,width=width, height=height, linewidth=1, color='blue', fill=False))
ax.axis('equal')
plt.show()

结果: scatter plot with blue rectangles

注意:如有必要,您可以通过Rectangle获取ax.get_children()实例。

答案 1 :(得分:1)

您可以在verts的{​​{1}}选项中定义标记,就像 Understanding matplotlib verts https://matplotlib.org/gallery/lines_bars_and_markers/scatter_custom_symbol.html

  

verts:(x,y)的顺序,可选

     

如果标记为None [这并不完全有效,请参见Understanding matplotlib verts   ],这些顶点将用于构建标记。的中心   标记以标准化单位位于(0,0)。整体   标记用s重新缩放。

源:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html

但是我不确定如何精确地定义您绘制的标记,您必须构造一个matplotlib.pyplot.scatter,其中包含每个像素的所需标记

list组成的矩形:

verts

源:Understanding matplotlib verts