LINUX.ORG.RU
ФорумTalks

А какой у вас дефолтный backend matplotlib'а?

 , ,


0

1

Собственно, сабж.

Узнать это можно выполнив скрипт https://saahriktu.org/tmp/getmatplotlibbackend.py .

#!/usr/bin/python3
import os
import matplotlib
import distro

print('matplotlib backend: ' + matplotlib.get_backend())
print(distro.linux_distribution())
if os.path.exists(os.getenv('HOME') + '/.config/matplotlib/matplotlibrc'):
    print('~/.config/matplotlib/matplotlibrc detected')

★★★★★

matplotlib backend: TkAgg
('Debian GNU/Linux', '10', 'buster')

Со временем и эту информацию станут использовать для таргетированной рекламы.

GPFault ★★
()

Дефолтный тот, который есть на кластере. Они мало чем отличаются в принципе.

yvv ★★☆
()
Ответ на: комментарий от yvv

Они мало чем отличаются в принципе.

Видимо, Вы не до конца поняли вопрос. Backend'ы matplotlib'а отличаются тем, что они по-разному выводят данные. Несколько backend'ов предназначены для вывода исключительно в файлы (например, 'Agg', 'PS', 'PDF', 'SVG'), другие же (например, 'Qt4Agg', 'Qt5Agg', 'TkAgg', 'WXAgg', 'GTK3Agg') могут, например, по matplotlib.pyplot.show() показывать картинку в окошке. Первые backend'ы так не умеют и при выполнении matplotlib.pyplot.show() не произойдёт вообще ничего.

Так вот, эти backend'ы могут быть установлены параллельно и их можно принудительно менять на лету, но дефолтен из них только один. И я начинаю подозревать, что в разных дистрибутивах дефолтны разные backend'ы, а потому код без принудительного указания нужного backend'а не является переносимым между дистрибутивами.

Документация matplotlib'а, судя по примерам, например, такому:

import matplotlib.pyplot as plt

# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True, startangle=90)
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

plt.show()
явно подразумевает, что дефолтен backend из второй группы, которые умеют показывать картинки в окошках. Однако, по ходу, на практике, дефолтен backend 'Agg', который ничего не выводит в окошки. А с него на тот же 'TkAgg' по дефолту переключают маинтейнеры дистрибутивов по их желанию.

Принудительное переключение backend'а выглядит так:

import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot

saahriktu ★★★★★
() автор топика
$ nix run nixpkgs#python3 -- /tmp/getmatplotlibbackend.py
Traceback (most recent call last):
  File "/tmp/getmatplotlibbackend.py", line 3, in <module>
    import matplotlib
ModuleNotFoundError: No module named 'matplotlib'
theNamelessOne ★★★★★
()

msys2 + Windows 10:

matplotlib backend: TkAgg

fsb4000 ★★★★★
()

Вот моё.

matplotlib backend: Qt5Agg
('Mageia', '8', 'mga8')
А вот такое я обнаружил на openSUSE Leap 15.3:
matplotlib backend: agg
('openSUSE Leap', '15.3', 'n/a')

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu
> matplotlib.use("TkAgg")

Я именно это и ставлю во все скрипты, именно для переносимости. В командной строке обычно проверяю, есть ли qt, но его как правило на кластерах нет.

yvv ★★☆
()
Последнее исправление: yvv (всего исправлений: 1)
matplotlib backend: Qt5Agg
/home/user1/Downloads/getmatplotlibbackend.py:7: DeprecationWarning: distro.linux_distribution() is deprecated. It should only be used as a compatibility shim with Python's platform.linux_distribution(). Please use distro.id(), distro.version() and distro.name() instead.
  print(distro.linux_distribution())
('Arch Linux', '', '')
greenman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.