如何将不同的图形(作为插图)添加到另一个Python图形中

47
我想制作一个类似这样的图表: 来自谷歌的插图 问题是,我从一些外部文件中获取了数据,我可以制作背景图,但我不知道如何在已有的图形内添加另一个图形,并更改数据以在两个图形中获得不同的结果。
下面是我用于制作背景图的代码。希望有人能帮忙。
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})

matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}']

data=np.loadtxt(r'C:\...\file.txt')
plt.plot(data[:,0],data[:,6],linewidth = 3,label='B$_0$ = 1.5 T d',linestyle= '--', color='black')

plt.show()

更多选项请参见此帖子的回答 - ImportanceOfBeingErnest
2个回答

71

有多种方法可以做到这一点,具体取决于你希望插图与大图之间的关系。

如果你只想插入一个与大图无关的图形,可以像这样操作:

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()

# These are in unitless percentages of the figure size. (0,0 is bottom left)
left, bottom, width, height = [0.25, 0.6, 0.2, 0.2]
ax2 = fig.add_axes([left, bottom, width, height])

ax1.plot(range(10), color='red')
ax2.plot(range(6)[::-1], color='green')

plt.show()

enter image description here

如果您想要让这两者之间有某种关系,可以查看这里的一些示例:http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html#insetlocator

如果您想要插入的内容是“缩放版”的话(比如说恰好是原图的两倍大小),当您进行交互式平移/缩放时它会自动更新,那么这很有用。

但对于简单的插图,只需像上面的示例中所示创建一个新轴即可。


在Jupyter中,fig.add_axes()对我不起作用。使用fig.axes()就可以了。 - Ali
有没有一种方法可以将坐标轴添加到图中的每个子图中,但是相对于子图的坐标? - Janosh
没关系,我只是需要向下滚动一下才发现了 inset_axes - Janosh

16
您可以使用inset_axes方法进行操作(详见文档):
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
inset_ax = inset_axes(parent_axes,
                    width="30%", # width = 30% of parent_bbox
                    height=1., # height : 1 inch
                    loc=3)

请查看此示例以获取完整演示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接