首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在for循环之外定义plt.figure()?

为什么在for循环之外定义plt.figure()?
EN

Stack Overflow用户
提问于 2018-06-28 20:08:50
回答 2查看 179关注 0票数 0

在下面的代码中,为什么我必须在for循环的开头定义figax?当我在循环末尾写它时,它只给我一个图,而不是两个图。

代码语言:javascript
运行
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2018-06-28 21:06:46

考虑将图形定义为获得一张可供绘制的纸张。因此,如果您想要在同一张图中绘制几个图,您需要定义一次(在循环之前),然后在上面绘制几个图(在循环中)。为此,您需要将savefig()show移出循环体:

代码语言:javascript
运行
复制
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()

代码语言:javascript
运行
复制
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()

这将为您提供类似以下内容:

票数 1
EN

Stack Overflow用户

发布于 2018-06-28 21:01:34

您的for循环有两个步骤。

如果您在循环内创建fig = plt.figure(),将有两个图,每次迭代一个;如果您将fig = plt.figure()放在for循环外,那么plt.plot(...)将在创建的唯一图形中绘制。

plt.figure()在for循环之外时,仍然有两个图,但只有一个图形,但由于线plt.show(),一个图正在替换另一个图或在另一个图上绘制。

如果删除plt.show()线,您将在同一图中看到这两个图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51082556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档