【问题标题】:Auto position an image on top of a matplotlib plot在 matplotlib 图的顶部自动定位图像
【发布时间】:2020-06-16 13:25:48
【问题描述】:

我有一张我创建的二维数据地图,但也想在地图上添加一个徽标。我希望图像根据我创建的图形的大小自动定位。我可以像这样手动完成:

im = Image.open('E:/Riskpulse_HD/Cefetra/Riskpulse_logo.png')
fig.set_dpi(150)
plt.figimage(im, xo=1000, yo=135)

但是,如果图形由于标题过长、颜色条大小等原因而改变大小,则徽标将位于错误的位置。如何使位置自动化,使其始终很好地适合右下角?作为参考,我创建的所有图形尺寸都是尺寸 (10,12)。

示例图:

【问题讨论】:

  • 您可能需要手动计算。 im.size 为您提供(width, height) 用于图像,您将需要height, width 用于地图/绘图,然后xo = map_width - im_width

标签: python image matplotlib


【解决方案1】:

可以获取图片大小

im_width, im_height = im.size

print(im_width, im_height)

和地块大小

bbox = plt.gca().get_window_extent()

print(bbox.x0, bbox.y0, bbox.x1, bbox.y1)

并计算右下角的位置

plt.figimage(im, xo=bbox.x1-im_width, yo=bbox.y0)

最终你可能需要一些边距

margin_x = 20
margin_y = 20

plt.figimage(im, xo=bbox.x1-im_width-margin_x, yo=bbox.y0+margin_y)

编辑:我添加了在调整窗口大小时将图像移动到角落的功能。

代码:

import matplotlib.pyplot as plt
from PIL import Image

# --- functions ---

def on_resize(event):
    #print(event)

    bbox = plt.gca().get_window_extent()
    print(bbox.x0, bbox.y0, bbox.x1, bbox.y1)

    logo.ox = bbox.x1-im_width-margin_x
    logo.oy = bbox.y0+margin_y

# --- main ---

plt.plot([1,2,3], [1,2,3])

im = Image.open('square-1.png')
im_width, im_height = im.size
print(im_width, im_height)

bbox = plt.gca().get_window_extent()
print(bbox.x0, bbox.y0, bbox.x1, bbox.y1)

margin_x = 20
margin_y = 20
logo = plt.figimage(im, xo=bbox.x1-im_width-margin_x, yo=bbox.y0+margin_y)

# connect function which will move image when window is resized
plt.gcf().canvas.mpl_connect('resize_event', on_resize)

plt.show()

结果:

【讨论】:

  • 我添加了在调整窗口大小时将图像移动到角落的功能。
猜你喜欢
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2019-07-10
  • 1970-01-01
  • 2011-08-14
相关资源
最近更新 更多