在matplotlib中指定以厘米为单位的图形尺寸

时间:2013-02-05 13:29:57

标签: matplotlib

我想知道你是否可以用厘米来指定matplotlib中数字的大小。目前我写道:

def cm2inch(value):
    return value/2.54

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

但是有原生方法吗?

4 个答案:

答案 0 :(得分:18)

这不是对“有原生方式吗?”这个问题的回答,但我认为,有一种更优雅的方式:

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)),我个人不喜欢,但有些人可能会这样做。


编辑:即使目前没有办法原生这样做,我也发现了一个讨论here

答案 1 :(得分:8)

我已经向GitHub上的matplotlib repo提交了拉取请求,以包含数字的{(3 {3}})

的set_size_cm和get_size_cm功能

如果被接受,则应该允许您使用原生方法以厘米为单位进行尺寸设置。

答案 2 :(得分:1)

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)

答案 3 :(得分:0)

我认为 here 提供的解决方案也很有帮助。 所以,就你而言,

cm = 1/2.54  # centimeters in inches
plt.figure(figsize=(12.8*cm, 9.6*cm))