python - 如何重用使用 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 刻度被叠印,线性线没有被绘制(或被叠印)。
我想了解这背后的基本原理以及要修改的内容以使其按预期工作。
解决方案
每次执行时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
给您的函数,但该想法适用于 thefig
和axes
对象)
推荐阅读
- java - hibernate的orderBy和Collections.sort()的区别
- python - 如何清除 tkinter 组合框?
- java - Java中的字符串递归方法
- java - 让我的谷歌助手在特定的词上调用我的 REST API
- c++ - c++ 如何使用 Variadic 创建闭包?
- javascript - 您是否应该向前端公开一个将数据写入数据库的函数?
- jquery - 通过 TEXT 使用 jQuery 搜索复选框列表项
- node.js - 为什么 MongoDB 无法连接到我的 NodeJS 应用程序?
- c++ - 无法调试 C++ 可执行文件(“断点当前不会被命中”)
- css - 闪亮的布局:使用可滚动面板和保持固定的面板构建闪亮的页面