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

Python: How to plot different plots separately in a function?

如果这听起来像一个愚蠢的问题,我深表歉意,但在网上搜索 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 个图表不应紧挨着挤在一起。它们应该是一个 after/below 另一个(类似于在一个函数中打印多个数据帧:它们将在另一个下方返回。这 3 个图表不共享轴、图例或任何东西。

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

非常感谢您的帮助!

试试这个:

fig, ax = plt.subplots(3, 1)

ax[0].plot(t, a, 'r') 
ax[1].plot(t, b, 'b') 
ax[2].plot(t, c, 'g') 

plt.show()

在您的示例中,您的 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()

如果你真的想把它作为 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()