Ответ 1
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 и размеров также повлияет на такие вещи, как fontsize. Более крупный 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 пикселя на дюйм меньше выбранного значения, которое будет иметь (небольшое) влияние на большие размеры изображения. Еще несколько обсуждений этого здесь.