我想在循环中绘制两个单独的数量。我想为每个数量创建一个单独的图形窗口,这样循环的每次迭代都会为每个数量创建一个子图。
基本上,我希望我的代码能做到这样的事情:
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()
这段代码不起作用;给我一个错误信息'图'对象没有属性' subplot'。我在此链接上尝试了很多变体 - http://matplotlib.org/api/pyplot_api.html,但我无法理解如何以正确的方式执行此操作。 在输出中,我想要两个图形窗口,每个窗口有6个子图,这样第一个包含m对n的图,第二个包含m1对n1的图。
答案 0 :(得分:2)
好的,很长的解释,因为这里有很多问题。
您遇到的最大问题是有多种方法可以处理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)
在这里,您所做的是捕获从Axes
返回的add_subplot()
实例。然后你绘制到Axes
实例上。此外,在指定要放置子图的位置时(第三个输入到Figure.add_subplot()
),您不希望使用y+1
,因为它将从1
开始并以{{结尾1}}将超出0-5的可用范围。请记住,Python索引从零开始。
最后,为了显示您刚创建的数据,您可以像这样调用6
:
pyplot.show()
或者你可以将数字保存到这样的文件:
plt.show()
结果数字如下: