plt.ioff()不起作用。如何绘制几个不同的图形

时间:2017-08-24 19:50:12

标签: python matplotlib

plt.ioff()
for i in range(0,len(variableList)):
    graph = lag1['VDC'].rolling(window=24).corr(other=lag1[variableList[i]])
    plt.title(variableList[i])
    plt.plot(graph)
    plt.axhline(y=0)
    plt.savefig(variableList[i])

我想绘制几个不同的独立图。默认为交互模式,其中每个新图形都绘制在前一个图形上。我阅读了该文档,发现我需要使用plt.ioff()。但是,添加此行不会改变任何内容。

2 个答案:

答案 0 :(得分:1)

交互模式用于在继续执行脚本的同时获取事件循环。这对于更新脚本中几个不同点的绘图,快速动画或在控制台内工作非常有用。
交互模式与正在创建的新数字无关。即你可以有几个数字或只有一个数字,都可以打开或关闭交互模式。

要在pyplot中获取新数字

plt.figure()

之后执行的pyplot命令将应用于此新图。

pyplot教程有一章Working with multiple figures and axes,详细解释了这一点。

答案 1 :(得分:0)

如果尝试使用non-interactive example, Usage Guide中的示例,则输出实际上是一组三个图。此外,如果设置plt.ioff(),则%matplotlib inline不起作用。

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

plt.ioff()
for i in range(3):
    plt.plot(np.random.rand(10))
    plt.show()

但是,如果使用plt.savefig,它会保存带有累积线的图。

%matplotlib inline

plt.ioff()
for i in range(3):
    plt.plot(np.random.rand(10))
    plt.savefig(f'{i}.png')

此外,如果满足以下条件,它将不起作用

%matplotlib auto

plt.ioff()
for i in range(3):
    plt.plot(np.random.rand(10))
    plt.show()

因此,对于非交互式图形,您应始终使用object-oriented (OO) style来避免此类问题:

%matplotlib auto

plt.ioff()
for i in range(3):
    fig, ax = plt.subplots()
    ax.plot(np.random.rand(10))
    fig.savefig(f'{i}.png')