2

我正在使用matplotlib库在 python 中为我的论文做插图。在这个插图中,我有很多线条、多边形、圆圈等。但是我还想.png从外部插入一个图像。

到目前为止,这是我正在尝试做的事情:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon

fig, ax = plt.subplots()

plt.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off')
ax.axis('off')

# drawing circle
ax.add_patch(
                plt.Circle((0, 0), 0.5, color = 'black')
            )
# drawing polygon
ax.add_patch(
        Polygon(
            [[0,0], [20, 15], [20, 40]],
            closed=True, fill=False, lw=1)
        )
# importing image
im = plt.imread("frame.png")
# defining image position/size
rect = 0.5, 0.4, 0.4, 0.4 # What should these values be?
newax = fig.add_axes(rect, anchor='NE', zorder=1)
newax.imshow(im)
newax.axis('off')

ax.set_aspect(1)
ax.set_xlim(0, 60)
ax.set_ylim(0, 40)
plt.show()

所以问题是,我如何确定 的值rect = 0.5, 0.4, 0.4, 0.4?例如,我希望 my 的左下角.png位于该点[20, 15],并且我希望它的高度为25

这是生成的图像:

未经调整的图像

但我希望这个虚拟框架调整到我的多边形点,像这样(这个在 Photoshop 中调整):

在 Photoshop 中调整

PS这里是链接frame.png实验。

4

1 回答 1

1

你能在同一轴上绘制你的线条和图片吗?为此,请extent使用plt.imshow()

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon


im='d:/frame.png'
img=plt.imread(im)
fig, ax = plt.subplots()

frame_height=25
x_start=20
y_start=15
ax.imshow(img,extent=[x_start,x_start+frame_height,y_start,y_start+frame_height])

ax.add_patch(
        Polygon(
            [[0,0], [20, 15], [20, 40]],
            closed=True, fill=False, lw=1)
        )
ax.set_xlim(0, 60)
ax.set_ylim(0, 40)
plt.show()
于 2016-08-08T20:52:20.710 回答