Укажите размер фигуры в сантиметре в 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)