首页 > 解决方案 > 如何重用使用 subplot(num= ... ) 创建的图形和轴

问题描述

我有一个我想多次使用的函数在同一个图形/轴中绘制数据。以下代码中的函数toto()工作正常。plt.figure(num='Single plot')如果已经创建了具有 id 'Single plot' 的图形,则无论何时调用它,我都会使用 which 检查。如果是,则重复使用相同的图形(我认为图形实例是全局的):

import matplotlib.pyplot as plt
import numpy as np

def toto(x, y):
    plt.figure('Single plot')
    plt.plot(x, y)

x = np.linspace(0, 2)    
toto(x, x)
toto(x, x**2)
plt.show()

多多结果

现在,我想使用subplot()而不是figure()因为它对我更有用。这个函数是:

def toto2(x, y):
    fig, axes = plt.subplots(num='Single plot 2')
    axes.plot(x, y)

但结果根本不像预期的那样:y 刻度被叠印,线性线没有被绘制(或被叠印)。

我想了解这背后的基本原理以及要修改的内容以使其按预期工作。

toto2 结果

标签: pythonmatplotlib

解决方案


每次执行时plt.subplots,都会创建一个新图形和一组新轴。如果你想重用这个图形,你应该在你的函数之外创建fig和对象,并将它们作为参数传递给你的函数。axes

import matplotlib.pyplot as plt
import numpy as np

def toto3(fig, axes, x, y):
    axes.plot(x, y)

x = np.linspace(0, 2)
fig, axes = plt.subplots(num='Single plot 2')
toto3(fig, axes, x, x)
toto3(fig, axes, x, x**2)
plt.show()

(在这种情况下,您甚至可以将代码简化为仅传递axes给您的函数,但该想法适用于 thefigaxes对象)


推荐阅读