我试图在每个子图的角落放一个小箭头。以下是我使用的示例代码:
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个完全由箭头支配的子图,并且没有看到图。
示例输出 - 错误:
我需要做什么才能让每个子画面都有一个小图像,并且可以看到情节本身?
答案 0 :(得分:1)
我认为考虑将图像放在一个框中并使用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()
在下面的代码中)。
set404()
答案 1 :(得分:0)
您会注意到x和y轴上的限制已设置为imshow的范围,而不是0-1
,您的情节需要查看该线。
您可以使用axis.set_xlim(0, 1)
和axis.set_ylim(0, 1)
来控制这一点。
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')
axis.set_xlim(0, 1)
axis.set_ylim(0, 1)
plt.show()
multi_plot()
或者,如果您想在matplotlib默认使用的数据周围保留5%的额外余量,可以将imshow
命令移到plot
命令之前,然后后者将控制轴限制。
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.imshow(im, extent=(0.4, 0.6, .5, .7), zorder=-1, aspect='auto')
axis.plot(xs, xs**2)
plt.show()
multi_plot()