我想访问图中的所有标签坐标。
例如,我画了2行并显示了一个图例:
import matplotlib.pyplot as plt
plt.plot([1,2],label="first_image")
plt.plot([2,1],label="second_image")
plt.legend()
plot.show()
我想获得下图中所有带圆圈的标签的位置:
答案 0 :(得分: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
设置,这可能在屏幕上和保存的图像之间有所不同。用于保存的后端也可以重绘画布,这可能会改变坐标。
答案 1 :(得分: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_handler
和Axis.set_label_position