Matplotlib работает не с пикселями напрямую, а с физическими размерами и DPI. Если вы хотите отобразить фигуру с определенным размером пикселя, вам нужно знать DPI вашего монитора. Например, эта ссылка обнаружит это для вас.
Если у вас есть изображение размером 3841x7195 пикселей, маловероятно, что ваш монитор будет таким большим, поэтому вы не сможете отобразить фигуру такого размера (matplotlib требует, чтобы фигура помещалась на экране, если вы попросите размер слишком большой он будет уменьшаться до размера экрана). Давайте представим, что вы хотите изображение 800x800 пикселей только для примера. Вот как показать изображение 800x800 пикселей на моем мониторе ( my_dpi=96
):
plt.figure(figsize=(800/my_dpi, 800/my_dpi), dpi=my_dpi)
Таким образом, вы просто делите размеры в дюймах на ваш DPI.
Если вы хотите сохранить фигуру определенного размера, то это другое дело. DPI экрана больше не так важны (если только вы не попросите фигуру, которая не помещается на экране). Используя один и тот же пример 800x800 пикселей, мы можем сохранить его в разных разрешениях, используя dpi
ключевое слово savefig
. Чтобы сохранить его в том же разрешении, что и на экране, просто используйте тот же dpi:
plt.savefig('my_fig.png', dpi=my_dpi)
Чтобы сохранить его как изображение размером 8000x8000 пикселей, используйте dpi в 10 раз больше:
plt.savefig('my_fig.png', dpi=my_dpi * 10)
Обратите внимание, что настройка DPI поддерживается не всеми бэкэндами. Здесь используется бэкэнд PNG, но бэкэнды pdf и ps будут реализовывать размер по-разному. Кроме того, изменение DPI и размеров также повлияет на размер шрифта. При большем DPI будут сохраняться те же относительные размеры шрифтов и элементов, но если вы хотите использовать меньшие шрифты для большего размера, вам нужно увеличить физический размер вместо DPI.
Возвращаясь к вашему примеру, если вы хотите сохранить изображение с разрешением 3841 x 7195 пикселей, вы можете сделать следующее:
plt.figure(figsize=(3.841, 7.195), dpi=100)
( your code ...)
plt.savefig('myfig.png', dpi=1000)
Обратите внимание, что для большинства экранов я использовал значение dpi, равное 100, но сохранил его dpi=1000
для достижения необходимого разрешения. В моей системе это создает png с 3840x7190 пикселями - кажется, что сохраненный DPI всегда на 0,02 пикселя / дюйм меньше выбранного значения, что будет иметь (маленький) эффект при больших размерах изображения. Еще немного обсуждения этого здесь .