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()
如果这听起来像一个愚蠢的问题,我深表歉意,但在网上搜索 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()