2017-12-06 12 views
0

matplotlib:hxとhyを使って描画したい点の座標を持つ2つのリストがあります。これらの点を画像:plotImageとして描画する関数があります。Matplotlibの画像の周りにプロットする方法

ここでは、これらの点の間に線をプロットしたいと思いますが、線はピクチャの周りに何とか行きます。重要なのは画像と重ならないということです。

ここでは例として、緑の線は私が今持っているもの(凸包です)です。赤い線は線の様子の例です。 Example

はここに私のコードです:

def plotImage(xData, yData, im): 
    for x, y in zip(xData, yData): 
     bb = Bbox.from_bounds(x,y,10,10) 
     bb2 = TransformedBbox(bb,ax.transData) 
     bbox_image = BboxImage(bb2, 
          norm = None, 
          origin=None, 
          clip_on=False) 

     bbox_image.set_data(im) 
     ax.add_artist(bbox_image) 

fig=plt.figure() 
ax=fig.add_subplot(111) 
img = plt.imread('pic.png') 

gx = list(map(lambda x: x - 5, hx)) # so the center of the picture is in the point I want to plot 
gy = list(map(lambda y: y - 5, hy)) #(without this, the image is drawn so that the picture's left bottom corner is in my point) 

plotImage(gx,gy,img) 
plt.plot(hx, hy, 'g-', markersize=10) 

だから私の質問は次のとおりです。この赤い船体を計算する方法?

+0

赤い線は正確でなければなりませんか?それは緑色の頂点と同じくらい多くの頂点を持つ必要がありますか? – yar

+1

これを使うことができますhttps://stackoverflow.com/questions/33831516/incrementing-area-of-convex-hull – Manuel

答えて

0

Incrementing area of convex hullを使用した例は、あなたのケースに適用することができます。

from scipy.spatial import ConvexHull 
import matplotlib.pyplot as plt 
import numpy as np 

gx = [-2, 2, -2, 2, 1, -0.5] 
gy = [3, 4, -2, -1, -1, 0.5] 

points = np.array((gx, gy)).T 
convh = ConvexHull(points) 
stretchCoef = 1.2 
pointsStretched = points[convh.vertices]*stretchCoef 

gx_new = pointsStretched[..., 0] 
gy_new = pointsStretched[..., 1] 
+0

これはポイントで非常にうまくいきますが、写真で試してみると、通常は重複しています。https ://i.imgur.com/RFYksbc.jpg 私は、船体内部の点からベクトルを取得し、その方向のベクトルをすべての船体点に追加しようとしています – Matt

関連する問題