Показывать графики 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.
- Загрузите и установите Xming (X11 для Windows) из sourceforge или VcXsrv (см. правку ниже)
sudo apt-get update
sudo apt-get install python3.6-tk
(возможно, вам придется установить другой python*-tk
в зависимости от используемой версии Python)
pip install matplotlib
(для matplotlib. Но многие другие вещи теперь тоже работают)
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, но подходящая версия.
Ответ 3
Я не знаю, решал ли кто-нибудь еще ту же проблему, но следуя этому руководству, решил мою проблему. Опуская ссылку ниже:
https://seanthegeek.net/234/graphical-linux-applications-bash-ubuntu-windows/
Ответ 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)