使用 matplotlib 在一个循环内的两个单独图中的子图 windows
Subplots in two separate figure windows inside one loop using matplotlib
我想在 运行 通过一个循环时绘制两个单独的量。我想为每个数量创建一个单独的图形 window,这样循环的每次迭代都会为每个数量创建一个子图。
基本上,我希望我的代码执行如下操作:
import numpy as np
import matplotlib.pyplot as plt
nr = [10, 15, 20, 25, 35, 50]
fig1 = plt.figure(1)
fig2 = plt.figure(2)
for y in range(len(nr)):
m = np.arange(y+1)
n = (y+1)*np.arange(y+1)
fig1.subplot(3,2,y+1)
fig1.plot(m,n, 'b')
fig1.title('y=%s'%y)
m1 = np.square(np.arange(y+1))
n1 = (y+1)*np.arange(y+1)
fig2.subplot(3,2,y+1)
fig2.plot(m1,n1, 'r')
fig2.title('y=%s'%y)
fig1.show()
fig2.show()
此代码无效;给我 'Figure' 对象没有属性 'subplot' 的错误消息。我已经尝试了这个 link - http://matplotlib.org/api/pyplot_api.html 的许多变体,但我无法理解如何以正确的方式做到这一点。
在输出中,我想要两个图 windows,每个图都有 6 个子图,这样第一个包含 m 对 n 的图,第二个包含 m1 对 n1 的图。
好吧,解释很长,因为这里有多个问题。
您遇到的最大问题 运行 是在 matplotlib 中有多种处理方式。事实上,实际上有多个接口。最简单和最常用的方法是使用 pyplot
及其方法(如 pyplot.subplot
和 pyplot.plot
来创建绘图。这适用于快速绘图,但不适用于您的情况。
由于您想创建两个图形并交替绘制这些图形,因此您将需要使用 pyplot
中功能更强大的对象。您自己完成了一部分,但我会尽力帮助您完成最后一部分。
你在这之前都很好:
import numpy as np
import matplotlib.pyplot as plt
nr = [10, 15, 20, 25, 35, 50]
fig1 = plt.figure(1)
fig2 = plt.figure(2)
for y in range(len(nr)):
m = np.arange(y+1)
n = (y+1)*np.arange(y+1)
但是当您尝试使用 Figure
的方法时,您会感到困惑并尝试使用属于 pyplot
的类似方法。下一部分应重写为:
ax1 = fig1.add_subplot(3,2,y)
ax1.plot(m,n, 'b')
ax1.set_title('y=%s'%y)
m1 = np.square(np.arange(y+1))
n1 = (y+1)*np.arange(y+1)
ax2 = fig2.add_subplot(3,2,y)
ax2.plot(m1,n1, 'r')
ax2.set_title('y=%s'%y)
在这里,您所做的是捕获从 add_subplot()
返回的 Axes
实例。然后你绘制到 Axes
实例上。此外,在指定要放置子图的位置时(Figure.add_subplot()
的第三个输入),您不想使用 y+1
,因为那将从 1
开始并在 6
这将超出 0-5 的可用范围。请记住 Python 索引从零开始。
最后,要显示您刚刚创建的图形,您可以这样调用 pyplot.show()
:
plt.show()
或者您可以像这样将图形保存到文件中:
fig1.savefig('fig1.png')
fig2.savefig('fig2.png')
生成的数字如下所示:
我想在 运行 通过一个循环时绘制两个单独的量。我想为每个数量创建一个单独的图形 window,这样循环的每次迭代都会为每个数量创建一个子图。
基本上,我希望我的代码执行如下操作:
import numpy as np
import matplotlib.pyplot as plt
nr = [10, 15, 20, 25, 35, 50]
fig1 = plt.figure(1)
fig2 = plt.figure(2)
for y in range(len(nr)):
m = np.arange(y+1)
n = (y+1)*np.arange(y+1)
fig1.subplot(3,2,y+1)
fig1.plot(m,n, 'b')
fig1.title('y=%s'%y)
m1 = np.square(np.arange(y+1))
n1 = (y+1)*np.arange(y+1)
fig2.subplot(3,2,y+1)
fig2.plot(m1,n1, 'r')
fig2.title('y=%s'%y)
fig1.show()
fig2.show()
此代码无效;给我 'Figure' 对象没有属性 'subplot' 的错误消息。我已经尝试了这个 link - http://matplotlib.org/api/pyplot_api.html 的许多变体,但我无法理解如何以正确的方式做到这一点。 在输出中,我想要两个图 windows,每个图都有 6 个子图,这样第一个包含 m 对 n 的图,第二个包含 m1 对 n1 的图。
好吧,解释很长,因为这里有多个问题。
您遇到的最大问题 运行 是在 matplotlib 中有多种处理方式。事实上,实际上有多个接口。最简单和最常用的方法是使用 pyplot
及其方法(如 pyplot.subplot
和 pyplot.plot
来创建绘图。这适用于快速绘图,但不适用于您的情况。
由于您想创建两个图形并交替绘制这些图形,因此您将需要使用 pyplot
中功能更强大的对象。您自己完成了一部分,但我会尽力帮助您完成最后一部分。
你在这之前都很好:
import numpy as np
import matplotlib.pyplot as plt
nr = [10, 15, 20, 25, 35, 50]
fig1 = plt.figure(1)
fig2 = plt.figure(2)
for y in range(len(nr)):
m = np.arange(y+1)
n = (y+1)*np.arange(y+1)
但是当您尝试使用 Figure
的方法时,您会感到困惑并尝试使用属于 pyplot
的类似方法。下一部分应重写为:
ax1 = fig1.add_subplot(3,2,y)
ax1.plot(m,n, 'b')
ax1.set_title('y=%s'%y)
m1 = np.square(np.arange(y+1))
n1 = (y+1)*np.arange(y+1)
ax2 = fig2.add_subplot(3,2,y)
ax2.plot(m1,n1, 'r')
ax2.set_title('y=%s'%y)
在这里,您所做的是捕获从 add_subplot()
返回的 Axes
实例。然后你绘制到 Axes
实例上。此外,在指定要放置子图的位置时(Figure.add_subplot()
的第三个输入),您不想使用 y+1
,因为那将从 1
开始并在 6
这将超出 0-5 的可用范围。请记住 Python 索引从零开始。
最后,要显示您刚刚创建的图形,您可以这样调用 pyplot.show()
:
plt.show()
或者您可以像这样将图形保存到文件中:
fig1.savefig('fig1.png')
fig2.savefig('fig2.png')
生成的数字如下所示: