gpt4 book ai didi

Python:如何在函数中分别绘制不同的图?

转载 作者:行者123 更新时间:2023-12-05 02:45:15 25 4
gpt4 key购买 nike

如果这听起来像是一个愚蠢的问题,我深表歉意,但在网上搜索了 20 分钟后我真的无法理解这个问题:

我有这样一个函数:

from numpy import *
import math
import matplotlib.pyplot as plt

def plot(t,a,b,c):
plt.plot(t, a, 'r')
plt.plot(t, b, 'b')
plt.plot(t, c, 'g')
plt.show()

然后:

t = linspace(0, 2*math.pi, 400)
a = sin(t)
b = cos(t)
c = a + b

plot(t,a,b,c)

plot(t,a,b,c) 将使所有三行 (a,b,c) 出现在同一个图形上。这不是我想要的。

我的目标是在 3 个不同的图表中分别绘制这 3 条线。这 3 个图表不应紧挨着挤在一起。它们应该一个接一个/一个接一个(类似于在一个函数中打印多个数据框:它们将一个接一个地返回。这 3 个图形不共享轴、图例或任何东西。

我在网上查了一下,看起来“subplot”是最流行的方法 - 但我认为“subplot”是指所有图形都相互关联,你指定这个大空有多少行和列“ Canvas ”应该是,然后你决定每个单独的子图在这个 Canvas 上的位置。就我而言,有没有办法在不使用子图的情况下单独绘制 3 个单独的图形?

非常感谢您的帮助!

最佳答案

在您的示例中,您的 3 个绘图确实相互关联——它们共享相同的 x 数据。子图非常适合显示您的图,您可以完全控制要如何标记它们。方法如下:

from matplotlib import pyplot as plt
from numpy import*
import math

t = linspace(0, 2*math.pi, 400)
a = sin(t)
b = cos(t)
c = a + b

fig, (ax1, ax2, ax3) = plt.subplots(3, 1)

ax1.plot(t, a, 'r')
ax1.set(xlabel ='t', ylabel = 'sin(t)')
ax1.set_title('Sin Graph', y=1.0, pad= -20)

ax2.plot(t, b, 'b', )
ax2.set(xlabel ='t', ylabel = 'cos(t)')
ax2.set_title('Cos Graph', y=1.0, pad= -20)

ax3.plot(t, c, 'g')
ax3.set(xlabel ='t', ylabel = 'sin(t) + cos(t)')
ax3.set_title('Sin + Cos Graph', y=1.0, pad= -20)

plt.show()

enter image description here

如果你真的想把它作为 3 个引用相同公式的独立图来做,你可以按如下所示进行。每个图都单独保存。每个图都会在您关闭前一个图后显示。

t = linspace(0, 2*math.pi, 400)
a = sin(t)
b = cos(t)
c = a + b

plt.plot(t, a, 'r')
plt.xlabel('t')
plt.ylabel('sin(t)')
plt.title('Sin Graph')
plt.savefig('Sin_Graph')
plt.show()

plt.plot(t, b, 'b')
plt.xlabel('t')
plt.ylabel('cos(t)')
plt.title('Cos Graph')
plt.savefig('Cos_Graph')
plt.show()

plt.plot(t, c, 'g')
plt.xlabel('t')
plt.ylabel('sin(t) + cos(t)')
plt.title('Sin + Cos Graph')
plt.savefig('Combined_Graph')
plt.show()

关于Python:如何在函数中分别绘制不同的图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66034281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com