Matplotlib似乎需要$ DISPLAY环境变量,这意味着正在运行的X服务器.
某些Web托管服务不允许运行X服务器会话.
有没有办法在没有正在运行的X服务器的情况下使用matplotlib生成图形?
[username@hostname ~]$ python2.6
Python 2.6.5 (r265:79063, Nov 23 2010, 02:02:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/pyplot.py", line 270, in figure
**kwargs)
File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
window = Tk.Tk()
File "/usr/local/lib/python2.6/lib-tk/Tkinter.py", line 1643, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, …Run Code Online (Sandbox Code Playgroud) 我正试图用命令在远程计算机上生成一个数字pylab.savefig.但我得到了这样的错误:
Unable to access the X Display, is $DISPLAY set properly?
Run Code Online (Sandbox Code Playgroud)
如何正确保存图形?
我有一个python代码在远程机器上进行一些计算,名为A.我ssh从一台名为B的机器上连接A via .有没有办法在机器B上显示数字?
在远程计算机上使用Matplotlib时(例如在Travis CI上),我遇到了与未设置的DISPLAY环境变量相关的频繁运行时错误.按照建议,我在测试脚本的开头设置了Agg后端matplotlib.use,并确保没有调用show().不过,我仍然会遇到以下错误:
Traceback (most recent call last):
File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/home/travis/build/pymc-devs/pymc/pymc/tests/test_plots.py", line 36, in test_multichain_plots
forestplot(ptrace, vars=['early_mean', 'late_mean'])
File "/home/travis/build/pymc-devs/pymc/pymc/plots.py", line 325, in forestplot
interval_plot = subplot(gs[0])
File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 896, in subplot
fig = gcf()
File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 450, in gcf
return figure()
File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 423, in figure
**kwargs)
File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 31, in new_figure_manager
return new_figure_manager_given_figure(num, thisFig)
File "/home/travis/anaconda/envs/testenv/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 38, in new_figure_manager_given_figure
canvas = FigureCanvasQTAgg(figure) …Run Code Online (Sandbox Code Playgroud) I am trying to plot a simple graph using pyplot, e.g.:
import matplotlib.pyplot as plt
plt.plot([1,2,3],[5,7,4])
plt.show()
Run Code Online (Sandbox Code Playgroud)
but the figure does not appear and I get the following message:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
Run Code Online (Sandbox Code Playgroud)
I saw in several places that one had to change the configuration of matplotlib using the following:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
I did this, but then got an error message because it …
我正在尝试运行一个非常简单的代码,在集群中输出.png文件.这是代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=20)
out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)
Run Code Online (Sandbox Code Playgroud)
如果我使用python simple_code.py安装了matplotlib 1.2.1的系统中的命令运行此代码,我会收到警告:
Unable to load library icui18n "Cannot load library icui18n:
Run Code Online (Sandbox Code Playgroud)
.png图像仍然生成,所以我没有问题.但是如果我在安装了matplotlib 1.3.0的集群中使用相同的命令和代码,则会失败并显示错误:
Traceback (most recent call last):
File "simple_code.py", line 33, in <module>
plt.scatter(x, y, s=20)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3078, in scatter
ax = gca()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 803, in gca
ax = gcf().gca(**kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 450, in gcf
return figure()
File …Run Code Online (Sandbox Code Playgroud) 我试图在中央服务器上运行模拟(用python编写),当模拟完成后,通过连接到我的本地PC将保存的图形文件/保存的数据文件移动到我的本地PC.代码如下:
import matplotlib.pyplot as plt
import subprocess
import scipy.io
import os
#Save data file:
scipy.io.savemat(data_path + Filename_str, dict(A=board))
#Create / Save figure by using imshow (Heatmap)
p = plt.imshow(mean_map.T, cmap = plt.cm.gist_yarg_r, origin = 'lower', extent = [0, phi, 0, Z], aspect='auto')
plt.savefig(figure_path + Filename_str + '-Homophily.pdf')
# Connect to my local host (arabian-knights) using ssh, and follow command.
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Data/* /scratch/Data/'])
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Figure/* /scratch/Figure/'])
Run Code Online (Sandbox Code Playgroud)
我从本地计算机(阿拉伯骑士)连接到服务器计算机后,在服务器计算机的后台运行此模拟.即使我关闭与服务器计算机的连接,因为模拟在后台运行,它不会停止,并且模拟完成后数据文件正确地移动到我的本地计算机.但是,不保存图文件(由matplotlib.pyplot.imshow生成),显示以下错误消息:
Traceback (most recent call …Run Code Online (Sandbox Code Playgroud) 当尝试使用 Tkinter 标准库包或其相关功能(海龟图形使用turtle和内置 IDLE IDE)或使用将此作为依赖项的第三方库(例如显示使用 Matplotlib 的图形窗口)。
似乎即使不存在因隐藏标准库模块名称而引起的问题(对于尝试遵循教程并使用海龟图形的初学者来说,这是一个常见问题 -示例 1;示例 2;示例 3;示例 4),通常会发生标准库 Tkinter 无法工作的情况。这是一个大问题,因为许多初学者再次尝试遵循使用海龟图形的教程,并盲目地假设turtle标准库将会存在。
可能会报错:
作为ModuleNotFoundError: No module named 'tkinter'; 或ImportError具有相同消息的 ;或使用不同的大小写(我知道名称从Tkinter2.x 更改为tkinter3.x;这是一个不同的问题)。
类似地,但引用内部_tkinter模块,并显示带有注释的代码“如果失败,您的 Python 可能无法配置 Tk”;或者使用自定义错误消息“请安装 python-tk 包”或类似内容。
当尝试turtle专门使用时,出现“没有名为turtle的模块” ,或者上述错误之一。
当尝试使用 Matplotlib 显示绘图时;通常,这种情况会在尝试更改后端后发生,默认设置是为了避免尝试使用 Tkinter。
当 Tkinter 被记录为标准库的一部分时,为什么会出现这样的问题?如何添加或修复缺少的标准库功能?对于特定的 …
我正在脚本中生成matplotlib数字,我可以在有或没有图形显示的情况下交替运行.我希望脚本能够自动调整:通过显示,它应该以交互方式显示数字,而没有显示,它应该只是将它们保存到文件中.
从没有正在运行的X服务器生成matplotlib图的问题的答案,我了解到可以使用Agg后端进行非交互式绘图.
所以我正在尝试使用此代码:
import matplotlib
try:
import matplotlib.pyplot as plt
fig = plt.figure()
havedisplay = True
except:
matplotlib.use("Agg")
import matplotlib.pyplot as plt
fig = plt.figure()
havedisplay = False
# do the plotting
if havedisplay:
plt.show()
else:
fig.savefig("myfig.png")
Run Code Online (Sandbox Code Playgroud)
这在带有显示器的情况下是例外的.但是,如果没有显示,则调用matplotlib.use无效,因为已经选择了显示.很明显我matplotlib.use之前应该打电话import matplotlib.pyplot,但后来我不知道如何测试显示器是否可用.
我也试过使用实验函数matplotlib.switch_backend而不是matplotlib.use,但这会产生RuntimeError.
有人知道如何使上述代码按预期工作,或者可以建议另一种方法来检测显示器是否可用于matplotlib?
我想在Amazon EC2(Linux AMI)上使用iPython.我已经安装了Anaconda并启动了iPython来测试我已经创建的一些脚本.现在我只对在终端(不是笔记本电脑)中运行它感兴趣.
在我的代码的开头我总是这样做:
import json
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
Run Code Online (Sandbox Code Playgroud)
但是,我从文本编辑器尝试了CTRL + C,然后在终端中使用%paste我得到错误:
TclError: no display name and no $DISPLAY environment variable
Run Code Online (Sandbox Code Playgroud)
如果我按照这个建议尝试ssh -X name @ host 没有显示名称和使用tkinter通过ssh的$ DISPLAY环境变量,我得到:
/opt/X11/bin/xauth: file /Users/adrianp/.Xauthority does not exist
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
X11 forwarding request failed on channel 0
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我尝试了https://superuser.com/questions/249045/x11-forwarding-from-amazon-ec2-ami,但仍然收到警告:
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Run Code Online (Sandbox Code Playgroud)
同样的错误: …
python ×10
matplotlib ×8
ssh ×3
tkinter ×2
amazon-ec2 ×1
anaconda ×1
figure ×1
installation ×1
ipython ×1
linux ×1
numpy ×1
pycharm ×1
subprocess ×1