将png插入/调整到图[matplotlib]

时间:2016-08-08 19:38:23

标签: python image matplotlib plot imread

我正在使用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的值?例如,我希望.png的左下角位于[20, 15]点,我希望其高度为25

这是结果图像:

nonadjusted image

但我希望将这个虚拟帧调整到我的多边形点,就像这样(这个在photoshop中进行了调整):

adjusted in photoshop

P.S。以下是要frame.png进行试验的link

1 个答案:

答案 0 :(得分:1)

你可以在同一轴上绘制线条和图片吗? 为此,请使用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()
{{1}}