在下面的代码中,为什么我必须在for循环的开头定义fig
和ax
?当我在循环末尾写它时,它只给我一个图,而不是两个图。
fig = plt.figure()
ax = fig.add_subplot(111)
Ls = [2, 4]
for L in range(len(Ls)):
x = np.arange(10)
y = np.random.randint(0, 11, size=10)
print(y)
ax.plot(x,y)
ax.set_label("x")
ax.set_label("y")
plt.savefig("jj.png")
plt.show()
发布于 2018-06-28 21:06:46
考虑将图形定义为获得一张可供绘制的纸张。因此,如果您想要在同一张图中绘制几个图,您需要定义一次(在循环之前),然后在上面绘制几个图(在循环中)。为此,您需要将savefig()
和show
移出循环体:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
Ls = [2, 4]
for L in range(len(Ls)):
x = np.arange(10)
y = np.random.randint(0, 11, size=10)
print(y)
ax.plot(x,y)
ax.set_label("x")
ax.set_label("y")
plt.savefig("jj.png")
plt.show()
它会给你类似这样的结果:
如果需要两个绘图,可以使用subplots()
方法创建多个轴,然后可以像这样调用plot()
:
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(2, 1) # This creates two axes objects, one for the upper one for the lower plot
for ax in axes:
x = np.arange(10)
y = np.random.randint(0, 11, size=10)
ax.plot(x,y)
ax.set_xlabel("x")
ax.set_ylabel("y")
fig.tight_layout()
plt.savefig("jj.png")
plt.show()
这将为您提供类似以下内容:
发布于 2018-06-28 21:01:34
您的for循环有两个步骤。
如果您在循环内创建fig = plt.figure()
,将有两个图,每次迭代一个;如果您将fig = plt.figure()
放在for循环外,那么plt.plot(...)
将在创建的唯一图形中绘制。
当plt.figure()
在for循环之外时,仍然有两个图,但只有一个图形,但由于线plt.show()
,一个图正在替换另一个图或在另一个图上绘制。
如果删除plt.show()
线,您将在同一图中看到这两个图。
https://stackoverflow.com/questions/51082556
复制相似问题