我试图在每个子图的角落里放一个小箭头。以下是我正在使用的示例代码:
import matplotlib.pyplot as plt
import matplotlib.image as image
from numpy import linspace
xs = linspace(0, 1, 100)
im = image.imread('arrow.png')
def multi_plot():
fig, axes = plt.subplots(4, 1)
x = 0
for axis in axes:
axis.plot(xs, xs**2)
axis.imshow(im, extent=(0.4, 0.6, .5, .7), zorder=-1, aspect='auto')
plt.show()
multi_plot()
不幸的是,这会产生 4 个完全由箭头控制的子图,并且看不到图本身。
输出示例 - 错误:
我需要做什么才能使每个子图都有一个小图像并且可以看到图本身?
最佳答案
我认为值得考虑使用 loc
参数将图像放入框中并将其放置在类似于图例的位置。优点是您根本不需要关心范围和数据坐标。您也不需要关心缩放或平移绘图时会发生什么。此外,它还允许将图像保持在其原始分辨率(下面的代码中的 zoom=1
)。
import matplotlib.pyplot as plt
import matplotlib.image as image
from numpy import linspace
from matplotlib.offsetbox import OffsetImage,AnchoredOffsetbox
xs = linspace(0, 1, 100)
im = image.imread('arrow.png')
def place_image(im, loc=3, ax=None, zoom=1, **kw):
if ax==None: ax=plt.gca()
imagebox = OffsetImage(im, zoom=zoom*0.72)
ab = AnchoredOffsetbox(loc=loc, child=imagebox, frameon=False, **kw)
ax.add_artist(ab)
def multi_plot():
fig, axes = plt.subplots(4, 1)
for axis in axes:
axis.plot(xs, xs**2)
place_image(im, loc=2, ax=axis, pad=0, zoom=1)
plt.show()
multi_plot()
关于python - 如何在 matplotlib 中的每个子图上嵌入图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550764/