Préciser la taille de la figure au centimètre près dans matplotlib

, je me demande si vous pouvez spécifier la taille d'une figure dans matplotlib en centimètre. Au moment où j'écris:

def cm2inch(value):
    return value/2.54

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

Mais est-il originaire?

26
demandé sur HyperCube 2013-02-05 17:29:57

3 réponses

Ce n'est pas une réponse à une question " Est-il originaire? ", mais je pense qu'il y a une façon plus élégante:

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)

alors on peut émettre plt.figure(figsize=cm2inch(12.8, 9.6)) , ce qui est à mon avis Une façon beaucoup plus propre. La mise en œuvre nous permet également d'utiliser cm2inch((12.8, 9.6)) , ce que je ne préfère pas personnellement, mais certaines personnes peuvent le faire.


EDIT: même s'il n'y a aucun moyen de faisant cela nativement en ce moment, j'ai trouvé une discussion ici .

17
répondu gns-ank 2015-03-15 19:20:56

j'ai soumis une demande de pull au matplotlib repo sur GitHub pour inclure les fonctionnalités set_size_cm et get_size_cm pour les figures ( https://github.com/matplotlib/matplotlib/pull/5104 )

si elle est acceptée, cela devrait vous permettre d'utiliser une approche native pour la taille en centimètres.

7
répondu Sameer Puri 2015-09-19 13:34:06

AFIK matplotlib n'a pas de fonctions de conversion.

si vous avez souvent besoin de convertir des unités, vous pouvez envisager d'utiliser pinte . Il offre également NumPy de soutien.

Pour votre exemple, vous pourriez faire quelque chose comme ce qui suit:

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)
1
répondu wolfrevo 2014-07-29 12:02:14