matplotlibでフィギュアのサイズをセンチメートルで指定できるかどうか疑問に思っています。現時点で私は書いています:
def cm2inch(value):
return value/2.54
fig = plt.figure(figsize=(cm2inch(12.8), cm2inch(9.6)))
しかし、ネイティブなアプローチはありますか?
matplotlibでフィギュアのサイズをセンチメートルで指定できるかどうか疑問に思っています。現時点で私は書いています:
def cm2inch(value):
return value/2.54
fig = plt.figure(figsize=(cm2inch(12.8), cm2inch(9.6)))
しかし、ネイティブなアプローチはありますか?
これは質問への答えではありません''ネイティブな方法はありますか?''、しかし私は、もっとエレガントな方法があると思います:
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))
は個人的には好まないを使用することもできますが、一部の人は使用する可能性があります。
編集:現時点ではこれをネイティブに行う方法はありませんが、ここでディスカッションを見つけました。
図のset_size_cmおよびget_size_cm機能を含めるためにGitHubのmatplotlibリポジトリにプルリクエストを送信しました(https://github.com/matplotlib/matplotlib/pull/5104)
受け入れられれば、センチメートル単位のサイズ設定にネイティブなアプローチを使用できるようになります。
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)
ここで提供される解決策も役立つと思います。だから、あなたの場合、
cm = 1/2.54 # centimeters in inches
plt.figure(figsize=(12.8*cm, 9.6*cm))