Показывать графики matplotlib в Ubuntu (подсистема Windows для Linux)

Итак, кажется, что на ubuntu для windows (подсистема Windows для Linux) люди предполагают, что нам нужно использовать бэкэнд Agg и просто сохранять изображения, а не показывать графики.

import matplotlib
matplotlib.use('Agg') # no UI backend

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title('About as simple as it gets, folks')

#plt.show()
plt.savefig("matplotlib.png")  #savefig, don't show

Как мы можем получить его, где plt.show() действительно покажет нам изображение? Моя текущая опция - переопределить plot.show() вместо этого, просто сохранить файл plot-148123456.png под /mnt/c/Users/james/plot/in windows и просто открыть окно проводника для просмотра изображений.

Я предполагаю, что могу разместить эту папку и использовать браузер.

Моя цель состоит в том, чтобы иметь возможность запускать простые примеры, такие как код выше, без изменения кода на ftp изображения где-нибудь и т.д. Я просто хочу, чтобы сюжет отображался в окне.

Кто-нибудь придумал достойный способ сделать это?

Ответ 1

Итак, я получил это работает следующим образом. У меня Ubuntu на Windows, с установленной Anaconda Python 3.6.

  1. Загрузите и установите Xming (X11 для Windows) из sourceforge или VcXsrv (см. правку ниже)
  2. sudo apt-get update
  3. sudo apt-get install python3.6-tk (возможно, вам придется установить другой python*-tk в зависимости от используемой версии Python)
  4. pip install matplotlib (для matplotlib. Но многие другие вещи теперь тоже работают)
  5. export DISPLAY=localhost:0.0 (добавьте в ~/.bashrc, чтобы сделать постоянным)

В любом случае, после всего этого этот код, работающий в ubuntu на wsl, работал как есть:

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)

plt.title('About as simple as it gets, folks')
plt.show()

результат: enter image description here

Может быть, это лучше сделать с помощью ноутбука Jupyter или чего-то еще, но было бы неплохо иметь базовую функциональность python matplotlib для командной строки в Ubuntu для Windows в подсистеме для Linux, и это также заставляет работать многие другие приложения графического интерфейса.

Изменить 2019-09-04: сегодня у меня возникли проблемы с "невозможно получить ресурсы экрана" после обновления некоторых библиотек. Поэтому я установил VcXsrv и использовал его вместо Xming. Просто установите из https://sourceforge.net/projects/vcxsrv/ и запустите xlaunch.exe, выберите несколько окон, затем следующий, следующий, хорошо. Тогда все заработало.

Ответ 2

Чтобы заставить matplotlib работать с GTKAgg на Bash на Ubuntu в Windows, я:

  • установлен VcXsrv под Windows (но все должно работать точно так же с Xming)
  • установите DISPLAY, как указано выше [ export DISPLAY=localhost:0.0 (добавьте в ~/.bashrc, чтобы сделать постоянным)]
  • выполнено sudo pip uninstall matplotlib
  • а затем sudo apt install python-matplotlib
  • обновленный matplotlibrc для чтения backend : GTKAgg (а не backend : agg)
  • Я также запускал sudo apt-get install python-gtk2-dev, но это может быть необязательно.

Удаление установочного matplotlib и переустановка его с помощью apt представляется необходимым, потому что pip не включает расширения C, необходимые для запуска GTK, но подходящая версия.

Ответ 4

Я обнаружил, что лучший подход - установить Jupyter в подсистеме Windows для Linux (WSL), выполнив

sudo apt update && upgrade
sudo apt install python3 python3-pip ipython3

Теперь вы можете установить matplotlib

pip3 install matplotlib

И блокнот Jupyter

pip3 install jupyter

Проверьте эту ссылку, если вам нужна дополнительная информация о настройке Python в подсистеме Windows для Linux (WSL)