Mag*_*Man 9 python window matplotlib suppress figure
即使我没有调用show(),我也无法使用matplotlib坚持显示一个数字wnidow.
有问题的功能是:
def make_plot(df):
fig, axes = plt.subplots(3, 1, figsize=(10, 6), sharex=True)
plt.subplots_adjust(hspace=0.2)
axes[0].plot(df["Date_Time"], df["T1"], df["Date_Time"], df["T2"])
axes[0].set_ylabel("Temperature (C)")
axes[0].legend(["T1", "T2"], bbox_to_anchor=(1.12, 1.1))
axes[1].semilogy(df["Date_Time"], df["IGP"], df["Date_Time"], df["IPP"])
axes[1].legend(["IGP", "IPP"], bbox_to_anchor=(1.12, 1.1))
axes[1].set_ylabel("Pressure (mBar)")
axes[2].plot(df["Date_Time"], df["Voltage"], "k")
axes[2].set_ylabel("Voltage (V)")
current_axes = axes[2].twinx()
current_axes.plot(df["Date_Time"], df["Current"], "r")
current_axes.set_ylabel("Current (mA)")
axes[2].legend(["V"], bbox_to_anchor=(1.15, 1.1))
current_axes.legend(["I"], bbox_to_anchor=(1.14, 0.9))
plt.savefig("static/data.png")
Run Code Online (Sandbox Code Playgroud)
其中df是使用pandas创建的数据帧.这应该是在Web服务器的后台,所以我想要的是这个函数将文件放在指定的目录中.然而,当它执行时它执行此操作,然后拉出一个图形窗口并陷入循环,阻止我重新加载页面.我错过了一些明显的东西吗
编辑:忘了添加,我在Windows 7上运行python 2.7,64位.
小智 17
步骤1
检查您是否以交互模式运行.默认为非交互式,但您可能永远不会知道:
>>> import matplotlib as mpl
>>> mpl.is_interactive()
False
Run Code Online (Sandbox Code Playgroud)
您可以使用将模式明确设置为非交互模式
>>> from matplotlib import pyplot as plt
>>> plt.ioff()
Run Code Online (Sandbox Code Playgroud)
由于默认是非交互式的,因此这可能不是问题.
第2步
确保你的后端是一个非gui后端.它的使用之间的区别Agg与TkAgg,WXAgg,GTKAgg等,后者是GUI后端,而Agg是一个非GUI后端.
您可以通过多种方式设置后端:
在matplotlib配置文件中; 找到以下列开头的行backend:
backend: Agg
Run Code Online (Sandbox Code Playgroud)在程序的顶部使用全局matplotlib函数use:
matplotlib.use('Agg')
Run Code Online (Sandbox Code Playgroud)直接从正确的后端导入画布; 这在非pyplot"模式"(OO风格)中非常有用,这是我经常使用的,对于网络服务器的使用方式,最终可能证明是最好的(因为这有点不同于上面,这里是一个完整的简短例子):
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
figure = Figure()
canvas = FigureCanvas(figure)
axes = figure.add_subplot(1, 1, 1)
axes.plot(x, np.sin(x), 'k-')
canvas.print_figure('sine.png')
Run Code Online (Sandbox Code Playgroud)小智 5
也许只是清除轴,例如:
plt.savefig("static/data.png")
plt.close()
Run Code Online (Sandbox Code Playgroud)
不会在内联模式下绘制输出。我不知道是否真的在清除数据。
| 归档时间: |
|
| 查看次数: |
8840 次 |
| 最近记录: |