首页 > 解决方案 > 基于另一个图形创建一个图形

问题描述

我想在一个函数中生成一个图形,然后能够在另一个函数中向该图中添加额外的东西。我希望这两个数字(原始的和编辑过的)都可以供将来使用。就像是:

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)

但是,这会更改原始图像(我想保持原来的样子)并且不会在f2. 起初我认为问题在于散点图没有完成,但正如卢卡斯在评论中所建议的那样,这不是实际问题,因为它可以用zorder.

我怎样才能做到这一点?

标签: pythonmatplotlibfigure

解决方案


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

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

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)

这将绘制两个带有轮廓的图形,但只有一个带有散点图。


推荐阅读