在 Python virtualenv 中更改 matplotlib 后端

Gab*_*iel 5 python plot backend matplotlib virtualenv

我已经安装了一个virtualenvpyenv使用Python v2.7.12。在这个 virtualenv 中,我matplotlib通过以下方式安装了v1.5.1:

pip install matplotlib
Run Code Online (Sandbox Code Playgroud)

没有问题。问题是一个简单的

import matplotlib.pyplot as plt
plt.scatter([], [])
plt.show()
Run Code Online (Sandbox Code Playgroud)

脚本无法生成绘图窗口。我在 virtualenv 中看到的后端使用:

import matplotlib
print matplotlib.rcParams['backend']
Run Code Online (Sandbox Code Playgroud)

is agg,这显然是问题的根本原因。如果我在系统范围的安装中检查后端,我会得到Qt4Agg(运行时上面的脚本显示一个绘图窗口就好了)。

SO中已经有几个类似的问题,我已经尝试了所有这些问题中给出的解决方案。

  1. Matplotlib plt.show() 不显示图形

    尝试使用--system-site-packages选项创建 virtualenv 。不行。

  2. 如何确保 Python 3 virtualenv 中的 matplotlib 使用 TkAgg 后端?

    已安装sudo apt install tk-dev,然后使用 重新安装pip --no-cache-dir install -U --force-reinstall matplotlib。后端仍然显示为agg.

  3. Matplotlib 在 vi​​rtualenv 中不显示图形

    遵循此答案中给出的安装说明,什么也没做(另一个答案涉及使用easy_install我不会这样做

  4. matplotlib 绘图窗口不会出现

    这里给出的解决方案是“安装一个 GUI 库(Tkinter、GTK、QT4、PySide、Wx 之一)”。我不知道该怎么做。此外,如果我使用:

    import matplotlib.rcsetup as rcsetup
    print(rcsetup.all_backends)
    
    Run Code Online (Sandbox Code Playgroud)

    我得到:

    [u'GTK', u'GTKAgg', u'GTKCairo', u'MacOSX', u'Qt4Agg', u'Qt5Agg', u'TkAgg', u'WX', u'WXAgg', u'CocoaAgg', u'GTK3Cairo', u'GTK3Agg', u'WebAgg', u'nbAgg', u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template']
    
    Run Code Online (Sandbox Code Playgroud)

    这意味着所有这些后端在我的系统可用(?)。

  5. 尽管我调用了 pyplot.show(),但 matplotlib 没有显示我的绘图

    我的matplotlibrc文件显示了这一行:

    backend      : Qt4Agg
    
    Run Code Online (Sandbox Code Playgroud)

    我不知道如何让 virtualenv 意识到这一点?

一些解决方案涉及创建指向matplotlib此处此处)的系统版本的链接,我不想这样做。我想使用matplotlib安装在virtualenv.

如果我尝试将后端设置为:

import matplotlib
matplotlib.use('GTKAgg')
Run Code Online (Sandbox Code Playgroud)

我得到ImportError: Gtk* backend requires pygtk to be installed(与 相同GTK)。但是,如果我这样做sudo apt-get install python-gtk2 python-gtk2-dev,我会看到它们都已安装。

使用:

import matplotlib
matplotlib.use('Qt4Agg')
Run Code Online (Sandbox Code Playgroud)

( 或Qt5Agg) 结果ImportError: Matplotlib qt-based backends require an external PyQt4, PyQt5, or PySide package to be installed, but it was not found.不确定我是否应该安装一些包?

使用:

import matplotlib
matplotlib.use('TkAgg')
Run Code Online (Sandbox Code Playgroud)

结果ImportError: No module named _tkinter,但sudo apt-get install python-tk说它已安装。

使用:

import matplotlib
matplotlib.use('GTKCairo')
Run Code Online (Sandbox Code Playgroud)

结果在ImportError: No module named gtk. 所以我尝试sudo apt-get install libgtk-3-dev但它说它已经安装了。

如何让 virtualenv 使用与我的系统正在使用的后端相同的后端?

归档时间:

查看次数:

4092 次

最近记录:

9 年,4 月 前