web-dev-qa-db-ja.com

Python-散布点に既知のサイズの長方形をプロットします

私は一連のポイントを持っています:

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

-

私はこれを、各散乱点に球形のブロブルがある画像でオーバーレイしています。このblobを適合させたいので、適合を実行するために散布点の周囲に長方形の領域を定義しています。

次のように、プロットでこの長方形を見て、ブロブを囲むのに十分な大きさであるかどうかを視覚的に確認したいと思います。

enter image description here

scatterを使ってできますか?それとも私ができる他の方法はありますか?

9
SuperCiocia

@ 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

注:必要に応じて、ax.get_children()を介してRectangleインスタンスを取得できます。

4
djvg

matplotlib vertsを理解するのように、matplotlib.pyplot.scattervertsオプションでマーカーを定義できますhttps://matplotlib.org/gallery/lines_bars_and_markers/scatter_custom_symbol.html

verts:(x、y)のシーケンス、オプション

マーカーが[なし]の場合(これは完全には機能しません。cf nderstanding matplotlib verts ]の場合、これらの頂点を使用してマーカーが作成されます。マーカーの中心は、正規化された単位で(0、0)にあります。マーカー全体がsで再スケーリングされます。

ソース: https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html

ただし、ペイントしたマーカーを正確に定義する方法がわからないため、ピクセルごとに目的のマーカーを含むlistを作成する必要があります

vertsの長方形:

verts = list(Zip([-10.,10.,10.,-10],[-5.,-5.,5.,5]))
ax.scatter([0.5,1.0],[1.0,2.0], marker=(verts,0))

ソース: matplotlib vertsを理解する

1
ralf htp