Matplotlib 如何将一个pyplot图形叠加到另一个pyplot图形上

Matplotlib 如何将一个pyplot图形叠加到另一个pyplot图形上,matplotlib,Matplotlib,搜索很容易揭示如何在一个图形上绘制多个图表,无论是使用相同的打印轴、第二个y轴还是子图。更难发现的是如何将一个图形叠加到另一个图形上,类似这样: 该图像是使用位图编辑器来覆盖图像的。我创建单独的情节没有困难,但不知道如何组合它们。我希望一行代码就足够了,但它是什么?以下是我的想象: bigFig = plt.figure(1, figsize=[5,25]) ... ltlFig = plt.figure(2) ... bigFig.overlay(lt

搜索很容易揭示如何在一个图形上绘制多个图表,无论是使用相同的打印轴、第二个y轴还是子图。更难发现的是如何将一个图形叠加到另一个图形上,类似这样:

该图像是使用位图编辑器来覆盖图像的。我创建单独的情节没有困难,但不知道如何组合它们。我希望一行代码就足够了,但它是什么?以下是我的想象:

    bigFig = plt.figure(1, figsize=[5,25])
    ...
    ltlFig = plt.figure(2)
    ...
    bigFig.overlay(ltlFig, pos=[x,y], size=[1,1])
我已经确定我可以使用figure.add_轴,但要获得正确的重叠图位置非常困难,因为参数是分数,而不是第一个图中的x,y值。它还[在我看来-我错了吗?]对图表的绘制顺序进行了限制,因为在依次添加其他绘图之前,必须先完成主绘图


什么是pyplot方法实现了这一点?

要创建插入轴,您可以使用
mpl\u工具包。轴网格1。插入定位器。插入轴

插入轴在轴坐标中的位置 插入轴在数据坐标中的位置 以上两种方法产生相同的图


(有关此解决方案的可能缺点,请参见)

问题是如何在数据坐标中定位插入轴?在这种情况下,您还需要知道数据坐标中轴的宽度和高度,对吗?这通常是不需要的,因为人们需要事先知道绘图的数据范围,因此通常使用相对图形或轴坐标。“问题是如何在数据坐标中定位插入轴?”是的,是的,理想情况下,继续在主轴和插入轴上绘制点。“在这种情况下,您还需要知道数据坐标中轴的宽度和高度,对吗?”如果我理解正确,不一定。假设我有一个大的数字,5“x25”,上面画着一些任意的(x,y)数据点。我希望以特定的(x,y)绘制插入轴,并使插入轴的大小为1“x 1”。我不认为这意味着我也需要知道数据坐标中插入轴的宽度和高度。(我还考虑过提前准备插入图,将它们保存为JPG或其他格式,然后找到某种方法将它们作为图像资源添加到特定数据点的图形中。但如果可以,我总是希望避免写入文件系统。)(将图像添加到轴上,但可能会降低质量。无需将图像保存到光盘,可以使用文件缓冲区。)当我要将图B(此处为“插入轴”)覆盖到图a(此处为“图”或“ax”)上时,这非常有效仅包含一个绘图。但有时图B实际上是包含在单个图中的子绘图的2x5矩阵。您有解决方案吗?可能您混淆了图形和轴这两个术语?当然,您可以按上述方式创建插入轴B1、B2、…、B10。是的,我可以依次添加多个插入轴,但请插入考虑到我想在一个大图形的轴上插入一个包含2x5子图的点(10000,300)的图。考虑每个子图应该是1×1。.使用插入轴单独添加子批次,我可以使用您显示的方法轻松放置第一个。但是我应该将第二个放置在哪里?我希望它位于第一个的右侧一英寸,但是(x,y)是什么在这一点上的值?一次覆盖整个图形(包括所有子图形)会更简单。只是要清楚。您不能在图形上覆盖图形;至少不能用matplotlib的术语。相反,您有一个图形和多个子图形或轴。您可以自由定位这些轴。但请注意,如果您在图形中定位多个轴数据坐标一旦放大或缩小绘图,它们可能很容易重叠。因为这个答案显然没有解决您的问题,那么先在问题中指定确切的问题如何?否则我将再次回答,然后您在评论中再次告诉我,这实际上不是您想要的。双方都感到沮丧。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

fig, ax= plt.subplots()

inset_axes = inset_axes(ax,
                    width=1,                     # inch
                    height=1,                    # inch
                    bbox_transform=ax.transAxes, # relative axes coordinates
                    bbox_to_anchor=(0.5,0.5),    # relative axes coordinates
                    loc=3)                       # loc=lower left corner

ax.axis([0,500,-.1,.1])
plt.show()
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

fig, ax= plt.subplots()

inset_axes = inset_axes(ax,
                    width=1,                     # inch
                    height=1,                    # inch
                    bbox_transform=ax.transData, # data coordinates
                    bbox_to_anchor=(250,0.0),    # data coordinates
                    loc=3)                       # loc=lower left corner

ax.axis([0,500,-.1,.1])
plt.show()