Укажите размер фигуры в сантиметре в matplotlib

Мне интересно, можно ли указать размер фигуры в matplotlib в сантиметре. На данный момент я пишу:

def cm2inch(value):
    return value/2.54

fig = plt.figure(figsize=(cm2inch(12.8), cm2inch(9.6)))

Но существует ли родной подход?

Ответы

Ответ 1

Это не ответ на вопрос " Есть ли родной путь?", но я думаю, что есть более элегантный способ:

def cm2inch(*tupl):
    inch = 2.54
    if isinstance(tupl[0], tuple):
        return tuple(i/inch for i in tupl[0])
    else:
        return tuple(i/inch for i in tupl)

Затем можно выдать plt.figure(figsize=cm2inch(12.8, 9.6)), что, по моему мнению, является более чистым способом. Реализация также позволяет использовать cm2inch((12.8, 9.6)), который я лично не предпочитаю, но некоторые люди могут это сделать.


РЕДАКТИРОВАТЬ: Несмотря на то, что в настоящий момент нет возможности сделать это изначально, я нашел обсуждение здесь.

Ответ 2

Я отправил запрос на перенос в repo matplotlib на GitHub, чтобы включить функции set_size_cm и get_size_cm для цифр (https://github.com/matplotlib/matplotlib/pull/5104)

Если это принято, это должно позволить вам использовать собственный подход к настройке размера в сантиметрах.

Ответ 3

AFIK matplotlib не имеет функций преобразования.

Если вам часто требуется конвертировать единицы, вы можете рассмотреть возможность использования pint. Он также поддерживает NumPy.

В вашем примере вы можете сделать что-то вроде следующего:

from pint import UnitRegistry
ureg = UnitRegistry()

width_cm, height_cm = (12.8 * ureg.centimeter, 9.6 * ureg.centimeter)
width_inch, height_inch = (width_cm.to(ureg.inch), height_cm.to(ureg.inch))

figsize_inch = (width_inch.magnitude, height_inch.magnitude)
fig = plt.figure(figsize=figsize_inch)