Matplotlib 图未显示

Posted

技术标签:

【中文标题】Matplotlib 图未显示【英文标题】:Matplotlib graph not showing 【发布时间】:2017-11-14 23:36:22 【问题描述】:

我的项目要求我在我的 Windows 系统上使用 putty 和 Connectify 热点打开 Raspberry Pi 的终端,以绘制和显示图表。但是,该图只能显示在我的 Raspberry Pi 显示器上,而不能显示在我的 Window 显示器上。这是我使用的代码:

import pymysql
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

conn = pymysql.connect(host="localhost", user="root", passwd="123456", db="XXX")

cur = conn.cursor()

query = """
SELECT data,time
FROM sensordata
WHERE time >= "2017-05-21"
  AND time < "2017-05-23"
"""


cur.execute(query)

data = cur.fetchall()

cur.close()
conn.close()

time,data= zip(*data)
plt.plot(data,time)

plt.title("XXX ")
plt.xlabel("Time & Date ")
plt.ylabel("Strength")
fig = plt.gcf()

fig.set_size_inches (55,27.5)
plt.grid(True)
plt.draw()
fig.savefig('test.png' ,dpi=100)
plt.show()

当我尝试在 putty 终端上运行它时收到的错误是:

Traceback (most recent call last):
  File "matplot2.py", line 27, in <module>
    plt.plot(data,time)
  File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 3092, in plot
    ax = gca()
  File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 828, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 462, in gcf
    return figure()
  File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 435, in figure
    **kwargs)
  File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 81, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 89, in new_figure_manager_given_figure
    window = Tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1813, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

我已经尝试使用我阅读的一些解决方案中的matplotlib.use('Agg')matplotlib.use('TKAgg'),但它并没有解决我的问题。希望有人能够解决我的问题,以便我可以在我的 Window 显示器上显示图表......提前致谢

【问题讨论】:

我认为您需要提供一些有关您的系统以及如何运行代码的更多信息。请注意matplotlib.use('Agg') 明确没有显示任何内容(这是此后端的目的)。 matplotlib.use('TKAgg') 但是应该在窗口中显示图表。 查看这里:link @ImportanceOfBeingErnest 嗨!我目前在我的 Windows 系统上使用 Putty 连接到树莓派。我希望能够显示在 putty 终端中键入 sudo python matplot2.py 后显示的图形。我试过使用matplotlib.use('TKAgg'),但它仍然返回相同的错误。但是当我使用matplotlib.use('Agg') 时,终端只是跳到下一行,并且没有像你提到的那样显示任何内容。 @ImportanceOfBeingErnest 在尝试了以下建议后,我下载了 Xming 并允许在 putty 上进行 SSH 转发。我使用与matplotlib.use('TKAgg') 完全相同的代码并返回错误:_tkinter.TclError: couldn't connect to display "localhost:10.0" 我在 Windows 10 上使用 Xming 时遇到了同样的问题。每次重新启动时,我都必须在打开 putty 之前手动使用 Xming 午餐。 【参考方案1】:

错误“_tkinter.TclError: no display name and no $DISPLAY environment variable”表明您的 X11 服务器存在问题。

我不知道您在 Raspberry 上从哪个主机 ssh,但您必须在 Windows 上运行 X-Server(例如 VcXsrv )。然后确保允许 X11 转发,例如ssh -X 甚至 ssh -Y。使用putty 时,请确保在Connection -&gt; SSH -&gt; X11 下设置启用X11 转发

如果一切都设置好了,运行 matplotlib 条形图演示(参见 cmets)应该如下所示:

enter image description here (没有图片,因为有人出于某种原因对答案投了反对票)

如果您的问题仍然存在,您可以尝试使用 MobaXTerm(在 Windows 上),它带有 X 服务器并且应该可以开箱即用。

如果您正在运行 VcXSrv,对我来说,我必须通过在您的 shell 中运行以下代码来导出我的 $DISPLAY 变量:export DISPLAY=localhost:0.0

【讨论】:

我尝试使用 XMing 代替,现在,我得到的错误是:_tkinter.TclError: couldn't connect to display "localhost:11.0" 您能否在连接到树莓派时再次检查是否启用了 X11 转发(geo.mtu.edu/geoschem/docs/putty_install.html)如果您启动其他具有 GUI 的程序(例如 gedit?)会发生什么情况。使用matplotlib.use('agg') 将您的输出限制为文件,因此不会打开“交互式”窗口。 我尝试打开 gedit 、 xeyes 、 xclock ,它们都工作正常。但是当我使用matplotlib.use('TKAgg')时会出现错误。但是,当使用 matplotlib.use('Agg') 时。该文件可以工作,我可以保存一个 png 图像。但与此同时,我需要将“交互式窗口”拿出来,因此我正在尝试找到一种方法。 如果不更改 matplotlib 后端会发生什么?我编辑了我的答案并在我自己的树莓派上进行了测试(目前距离 600 公里,所以我使用 putty 对其进行 ssh),它通过在 putty 中启用 X11 转发并运行 VcXsrv 来工作。我使用这里提到的源代码matplotlib.org/examples/api/barchart_demo.html。 出了什么问题?

以上是关于Matplotlib 图未显示的主要内容,如果未能解决你的问题,请参考以下文章

论plt.scatter()画散点图未设置“颜色参数c”却能画出五颜六色点的原因

Matplotlib:显示中文设置描述信息

matplotlib不显示中文设置

python--Matplotlib中显示负号问题

OpenCV 函数学习04-用 matplotlib 显示图像(plt.imshow)

Python OpenCV ——Matplotlib显示图片