2017-02-10 9 views
1

プロット内のすべてのラベル座標にアクセスしたいと思います。Matplotlibでラベル座標をプロットする

たとえば、私は2線を描画し、凡例を示しています

import matplotlib.pyplot as plt 
plt.plot([1,2],label="first_image") 
plt.plot([2,1],label="second_image") 
plt.legend() 
plot.show() 

私は、次の画像のすべての丸で囲んだラベルの位置を取得したいと思います:

と仮定すると、

enter image description here

+2

「位置を取得する」とはどういう意味ですか?あなたはラベルを移動するか、単にどこにいるのかを知りたいですか? – JB1

+0

ピクセルがどこにあるのかを知りたいのですが、 – Drico

+0

私はそれらのポジションを見つける目的について教えてくれると思います。私はあなたの質問に直接答えましたが、私はあなたが現在、そのピクセル位置が、おそらく別の方法を使ってより簡単に達成できる何かを達成するのに役立つかもしれないとあなたが考えると恐れています。 – ImportanceOfBeingErnest

答えて

0

伝説の位置を変えたい場合は、次のようなものを使用することができます。

import matplotlib.pyplot as plt 

line1, = plt.plot([1,2],label="first_image", linestyle='--') 
line2, = plt.plot([2,1],label="second_image", linewidth=4) 

# Create a legend for the first line. 
first_legend = plt.legend(handles=[line1], loc=1) 

# Add the legend manually to the current Axes. 
ax = plt.gca().add_artist(first_legend) 

# Create another legend for the second line. 
plt.legend(handles=[line2], loc=4) 

plt.show() 

またはmatplotlib.legend_handlerAxis.set_label_position

+0

さて、いいえ、後で画像を操作する座標が必要です。とにかくありがとうございました。 – Drico

1

get_window_extent()メソッドを使用すると、ウィンドウの座標でほとんどのアーティストの位置を取得できます。

この方法を使用するには、以前にキャンバスに描画されている必要があります。これはplt.gcf().canvas.draw()によって手動でトリガーすることができます。

import matplotlib.pyplot as plt 
plt.plot([1,2],label="first_image") 
plt.plot([2,1],label="second_image") 
leg = plt.legend() 

plt.gcf().canvas.draw() 
ticks = [t for t in plt.gca().get_xticklabels()] 
for i, t in enumerate(ticks): 
    print "Label {}, data: {}".format(i, t.get_text()), t.get_window_extent() 
print "Legend location: ", leg.get_window_extent() 
for i, l in enumerate(leg.texts): 
    print "Label {}, {}".format(i, l.get_text()), l.get_window_extent() 
plt.show() 

これは

Label 0, data: Bbox(x0=102.545454545, y0=43.0777777778, x1=102.545454545, y1=43.0777777778) 
Label 1, data: 0.0 Bbox(x0=91.6079545455, y0=29.0777777778, x1=113.482954545, y1=43.0777777778) 
Label 2, data: 0.2 Bbox(x0=181.789772727, y0=29.0777777778, x1=203.664772727, y1=43.0777777778) 
Label 3, data: 0.4 Bbox(x0=271.971590909, y0=29.0777777778, x1=293.846590909, y1=43.0777777778) 
Label 4, data: 0.6 Bbox(x0=362.090909091, y0=29.0777777778, x1=384.090909091, y1=43.0777777778) 
Label 5, data: 0.8 Bbox(x0=452.272727273, y0=29.0777777778, x1=474.272727273, y1=43.0777777778) 
Label 6, data: 1.0 Bbox(x0=542.454545455, y0=29.0777777778, x1=564.454545455, y1=43.0777777778) 
Label 7, data: Bbox(x0=102.545454545, y0=43.0777777778, x1=102.545454545, y1=43.0777777778) 
Legend location: Bbox(x0=419.305555556, y0=214.431597222, x1=569.055555556, y1=260.768402778) 
Label 0, first_image Bbox(x0=463.75, y0=241.072222222, x1=541.375, y1=255.212847222) 
Label 1, second_image Bbox(x0=463.75, y0=219.987152778, x1=563.5, y1=234.127777778) 

関連するすべての座標を出力します。注しかし、彼らはすべての再描画のために変更される可能性があるため、一般的には、図内の任意の操作のためにそれらの座標を使用する必要または推奨されていないこと。ユースケースによっては、特定の目標を達成するためのより良い方法があるかもしれません。

これらの座標は、必ずしも保存画像のピクセル座標である必要はありません。それらは画面上と保存された画像で異なるかもしれないdpiの設定に依存します。保存に使用されるバックエンドはキャンバスを再描画し、座標を変更する可能性があります。

関連する問題