如何将图像居中放置在matplotlib中

2024-06-01 01:53:14 发布

您现在位置:Python中文网/ 问答频道 /正文

matplotlib中有一个图形,我想将图像覆盖到该图形上。目前,我正在使用OffsetImage执行此操作:

team_logo = (os.getcwd() + "\Team_Logos"'\\' + data['posteam'].iloc[0] + '.png')
team_logo = plt.imread(team_logo)
team_logo = OffsetImage(team_logo, zoom=0.50)
team_logo.set_offset((2800, 2800))
ax.add_artist(team_logo)

但是,我希望图像居中,而不是team_logo.set_offset((2800, 2800))行。我想在不同的时间使用不同大小的图像,因此手动将((2800,2800)更改为我创建的每个图形的不同坐标不是一个好的解决方案。我还使用plt.savefig()dpi=400作为我的最终图像

实际的图形本身始终是一个120 x 53.3的图形(x x x y),但由于某些原因,OffsetImage在plt.show()中显示的重叠图像与在plt.savefig()中显示的重叠图像不同,因此我不能只使用((60,26.65))

有人知道有没有办法让我的图像在保存到图像的绘图上居中?如果有更好的方法,我不必使用OffsetBox。谢谢


Tags: 图像图形datamatplotlibospltteamoffset
1条回答
网友
1楼 · 发布于 2024-06-01 01:53:14

基于this tutorial,最简单的方法可能是使用AnnotationBbox:

from matplotlib.offsetbox import OffsetImage, AnnotationBbox

img = plt.imread('https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Ada_Lovelace_color.svg/200px-Ada_Lovelace_color.svg.png', format='png')

fig, ax = plt.subplots()

imagebox = OffsetImage(img, zoom=0.4)
imagebox.image.axes = ax

ab = AnnotationBbox(imagebox, (0.5, 0.5), xycoords='axes fraction',
                    bboxprops={'lw':0})

ax.add_artist(ab)

plt.show()

enter image description here

相关问题 更多 >