python - 如何在 matplotlib 中的每个子图上嵌入图像?

标签 python matplotlib imshow

我试图在每个子图的角落里放一个小箭头。以下是我正在使用的示例代码:

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 个完全由箭头控制的子图,并且看不到图本身。

输出示例 - 错误:

Example output - Incorrect

我需要做什么才能使每个子图都有一个图像并且可以看到图本身?

最佳答案

我认为值得考虑使用 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()

enter image description here

关于python - 如何在 matplotlib 中的每个子图上嵌入图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550764/

相关文章:

python - Azure func 在使用 Core Tools 4.0.5030 的 M1 Mac 上启动失败

c++ - python <=> c++ 跨语言哈希

python - 如何使用python和openCV制作热图

python - 打印频域图的最高峰值

Python 和 scikit 学习 : replace matrix vector product during training with custom call

python - 是否有用于字符串自然排序的内置函数?

python - OpenCV 错误 : Unspecified Error(The Function is not implemented)

python - 使用 imshow 和 twiny : cannot set xlim

matplotlib - matplotlib —以交互方式选择点或位置?

python - 使用 alpha 值绘制数据,生成一幅彩色图像 - Matplotlib