我希望使用matplotlib
生成一个多图,并在每个子图的角落嵌入一个图像。
我已经能够使用following example of the matplotlib documentation(下面提供的代码)在(单个)情节图中嵌入图像。
我现在正试图在一系列子图的每个角落嵌入一个图像。我似乎找不到类似于上一个例子所依据的图add_axes()
的功能。
我怎样才能达到理想的布局?
import pylab as plt
from numpy import linspace
from matplotlib.cbook import get_sample_data
from scipy.misc import imread
xs = linspace(0, 1, 100)
def single_plot():
fig, ax = plt.subplots()
ax.plot(xs, xs**2)
fn = get_sample_data("grace_hopper.png", asfileobj=False)
image_axis = fig.add_axes([0.65, 0.70, 0.3, 0.2], anchor='NE', zorder=10)
image_axis.imshow(imread(fn))
plt.show()
plt.clf()
def multi_plot():
fig, axes = plt.subplots(4)
for axis in axes:
axis.plot(xs, xs**2)
# How to draw the same image as before in the corner of each subplot ?
plt.show()
if __name__ == '__main__':
single_plot()
multi_plot()
答案 0 :(得分:2)
您可以使用相同的方法在多个子图上叠加图像。必须为要覆盖的每个图像定义相对于图形整体的轴位置。以下是使用代码和Matplotlib文档的简单示例。
def multi_plot():
fig, axes = plt.subplots(4, 1, figsize=(8, 10))
fn = get_sample_data("grace_hopper.png", asfileobj=False)
image = plt.imread(fn)
x = 0
for axis in axes:
axis.plot(xs, xs**2)
# [left, bottom, width, height]
image_axis = fig.add_axes([0.125, 0.25 + x, 0.15, 0.65],
zorder=10, anchor="N")
image_axis.imshow(image)
image_axis.axis('off')
x -= 0.209
plt.show()
我选择逐渐减小新轴相对于图底部的位置。您还可以为要添加的每个图像叠加指定精确位置。