在给定XY范围内的Matplotlib图中显示图像
我从一篇期刊论文中实现了一个数值模型,现在想用Python和Matplotlib把我的版本绘制在论文PDF中的图表截图上。我先截取了论文PDF中图表的截图,并把它裁剪到了(x1,y1)和(x2,y2)这两个边界,单位是毫米和牛顿。这个图表可以是任何格式(jpg、png等等)。
接下来,我想在Matplotlib中显示这张图片,背景区域的总图形尺寸是从(0,0)到(x3,y3),同样也是用毫米和牛顿来测量。这张图片只占据图表的一部分空间,并且需要按比例缩放,以适应由(x1,y1)和(x2,y2)定义的框架。需要注意的是,(x1,y1)和(x2,y2)的比例不一定和原始图片的比例一致,所以图片在x和y方向上都必须独立缩放,以便适应这个框架。我不想让我的图表受限于源图片中图表的原始比例。
那么,如何把这张图片映射到图表的物理空间中呢?
1 个回答
2
基本上,你可以在使用 imshow
的时候,利用 extent
这个参数。如果你希望图像的宽高比不固定为1,那你还需要设置 autoscale='auto'
。
这里有个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
x = np.linspace(2, 8, 100)
y = np.cos(x)
x1, x2 = 3, 5.6
y1, y2 = -2.8, 9.6
im = np.array(Image.open('grace_hopper.jpg'))
fig, ax = plt.subplots()
ax.imshow(im, extent=[x1, x2, y1, y2], aspect='auto', cmap='gray')
ax.plot(x, y)
plt.show()