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

3

如果这个问题听起来很愚蠢,请谅解,但在网上搜索了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”是当所有图形彼此相关时,您指定这个大空白“画布”应该有多少行和列,然后您决定每个单独的子图在该画布上的位置。在我的情况下,是否有一种方法可以单独绘制3个图表,而不使用子图?

非常感谢您的帮助!


2
在每个 plt.plot(...) 后面添加 plt.show() 吗? - BigBen
那真是一个非常明显的“duh”时刻 - 真不敢相信我错过了这么显而易见的东西。谢谢!@BigBen - DPatrick
2个回答

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

如果您真的想将其作为引用相同公式的三个独立图来完成,可以按照以下所示进行操作。每个图都被单独保存。在关闭前一个图后,下一个图才会显示。
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()

我的真实世界数据的图表彼此之间没有关系,因此我想将它们分开绘制。感谢您提供的两种解决方案!你和Ben的解决方案都解决了我的问题。非常感谢你们俩! - DPatrick

0

试试这个:

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()

OP要求不使用子图。 - BigBen
1
抱歉!在这种情况下,做法是为每个图形分配不同的数字。或者添加plt.show()。 - Ariel Werle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接