46

我想知道您是否可以在 matplotlib 中以厘米为单位指定图形的大小。此刻我写道:

def cm2inch(value):
    return value/2.54

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

但是有本地方法吗?

4

4 回答 4

32

这不是对“有本地方式吗? ”这个问题的答案。'',但我认为,有一种更优雅的方式:

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


编辑:尽管目前无法在本地执行此操作,但我在这里找到了一个讨论。

于 2014-04-01T13:31:25.387 回答
17

我已经向 GitHub 上的 matplotlib 存储库提交了一个拉取请求,以包含图形的 set_size_cm 和 get_size_cm 功能(https://github.com/matplotlib/matplotlib/pull/5104

如果它被接受,那应该允许您使用本机方法来设置以厘米为单位的尺寸。

于 2015-09-19T13:34:06.723 回答
1

AFIKmatplotlib没有转换功能。

如果您经常需要转换单位,您可以考虑使用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)
于 2014-07-29T12:02:14.180 回答
0

我认为这里提供的解决方案也很有帮助。所以,在你的情况下,

cm = 1/2.54  # centimeters in inches
plt.figure(figsize=(12.8*cm, 9.6*cm))
于 2021-03-09T01:27:11.080 回答