根据另一个图形创建一个图形

Create a figure based on another one

我想在一个函数中生成一个图形,然后能够在另一个函数中向该图添加其他内容。我希望这两个图(原始图和编辑后的图)都可供将来使用。类似于:

import numpy as np
import matplotlib.pyplot as plt

def plot_1():
    X, Y = np.meshgrid(np.linspace(0, 10, 100), np.linspace(0, 10, 50))
    z = np.random.rand(50, 100)

    fig, ax = plt.subplots()
    ax.contourf(X, Y, z, cmap="viridis")

    return fig

def plot_2(fig):
    ax = fig.axes[0]
    ax.scatter([2, 5], [1, 4], zorder=2.5, color="r")

    return ax

f = plot_1()
f2 = plot_2(f)

然而,这改变了原始图像(我想保持原样)并且 return 不是 f2 中的可打印图形。起初我认为问题是散点图没有完成,但正如卢卡斯在评论中所建议的那样,这不是实际问题,因为它可以用 zorder.[=13= 的正确值来解决]

我怎样才能做到这一点?

如果我理解正确的话:你想要两个数字,在两个数字中绘制相同的图形,然后只在一个图形中绘制一些额外的图形。

这样做的方法是在函数外部创建图形并将轴传递给函数:

import numpy as np
import matplotlib.pyplot as plt

def plot_1(ax):
    X, Y = np.meshgrid(np.linspace(0, 10, 100), np.linspace(0, 10, 50))
    z = np.random.rand(50, 100)
    ax.contourf(X, Y, z, cmap="viridis")

def plot_2(ax):
    ax.scatter([2, 5], [1, 4], zorder=2.5, color="r")


fig_1, ax_1 = plt.subplots()
fig_2, ax_2 = plt.subplots()

plot_1(ax_1)
plot_1(ax_2)
plot_2(ax_2)

这将用 contourf 绘制两个图形,但只有一个用散点图绘制。