matplotlib - Соотношение между dpi и размером фигуры



graph visualization (1)

Размер фигуры ( figsize ) определяет размер фигуры в дюймах. Это дает количество пространства, которое оси (и другие элементы) имеют внутри фигуры. Размер фигуры по умолчанию составляет (6.4, 4.8) дюйма в matplotlib 2. Больший размер фигуры позволит отображать более длинные тексты, больше осей или больше меток.

Количество точек на дюйм (dpi) определяет количество пикселей на рисунке. Dpi по умолчанию в matplotlib - 100. Фигура в figsize=(w,h) будет иметь

px, py = w*dpi, h*dpi  # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels

Таким образом, чтобы получить фигуру с размером пикселя, например, (1200,600) вы можете выбрать несколько комбинаций размера фигуры и точек на дюйм, например

figsize=(15,7.5), dpi= 80
figsize=(12,6)  , dpi=100
figsize=( 8,4)  , dpi=150
figsize=( 6,3)  , dpi=200
etc.

Теперь, в чем разница? Это определяется размером элементов внутри фигуры. Большинство элементов, таких как линии, маркеры, тексты, имеют размер, указанный в пунктах.
В рисунках Matplotlib количество точек на дюйм (ppi) равно 72. Линия с толщиной 1 точка будет равна 1/72. дюйм шириной Текст с размером шрифта 12 пунктов будет 12./72. дюйм высотой

Конечно, если вы измените размер фигуры в дюймах, точки не изменятся, поэтому большая фигура в дюймах по-прежнему имеет такой же размер элементов. Таким образом, изменение размера фигуры похоже на лист бумаги другого размера. Это, конечно, не изменит ширину линии, нарисованной той же ручкой.

С другой стороны, изменение dpi масштабирует эти элементы. При разрешении 72 dpi линия с размером 1 точка имеет толщину в один пиксель. При разрешении 144 т / д эта линия составляет 2 пикселя. Следовательно, большее dpi будет действовать как увеличительное стекло. Все элементы масштабируются увеличительной силой объектива.

Сравнение для постоянного размера фигуры и изменения точек на дюйм показано на рисунке ниже слева. Справа вы видите постоянное dpi и размер фигуры. Цифры в каждой строке имеют одинаковый размер пикселя.

Код для воспроизведения:

import matplotlib.pyplot as plt
%matplotlib inline

def plot(fs,dpi):
    fig, ax=plt.subplots(figsize=fs, dpi=dpi)
    ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi))
    ax.plot([2,4,1,5], label="Label")
    ax.legend()

figsize=(2,2)
for i in range(1,4):
    plot(figsize, i*72)

dpi=72
for i in [2,4,6]:
    plot((i,i), dpi)

Я создал фигуру с помощью matplotlib, но я понял, что ось графика и нарисованная линия уменьшены.

Читая эту предыдущую ветку обсуждения , она объясняет, как установить размер фигуры.

fig, ax = plt.subplots()

fig.set_size_inches(3, 1.5)

plt.savefig(file.jpeg, edgecolor='black', dpi=400, facecolor='black', transparent=True)

С помощью приведенного выше кода (другие конфигурации удалены для краткости), я получаю результирующий файл изображения с 1200 X 600 желаемых размеров (мы должны сказать разрешение тоже?) И желаемый размер файла.

Проецируемое изображение масштабируется необычным образом, например, аннотации увеличиваются. В то время как я могу установить размер надписей на оси, фигура не выглядит пропорциональной по отношению к масштабу, так как нижняя и правая части спины большие, как и нанесенные линии.

Поэтому возникает вопрос, какие конфигурации идут не так?





visualization