web-dev-qa-db-fra.com

Comment changer la taille de la figure pour un complot né de la mer?

Comment puis-je changer la taille de mon image pour qu'elle soit adaptée à l'impression?

Par exemple, j'aimerais utiliser du papier A4 dont les dimensions sont de 11,7 pouces sur 8,27 pouces en orientation paysage.

148
Michael Grazebrook

Vous devez créer les objets matplotlib Figure et Axes à l'avance, en précisant la taille de la figure:

from matplotlib import pyplot
import seaborn

import mylib

a4_dims = (11.7, 8.27)
df = mylib.load_data()
fig, ax = pyplot.subplots(figsize=a4_dims)
seaborn.violinplot(ax=ax, data=df, **violin_options)
138
Paul H

Vous pouvez également définir la taille de la figure en transmettant le dictionnaire au paramètre rc à l'aide de la touche 'figure.figsize' dans seaborn set

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})

Une autre solution consiste à utiliser figure.figsize sur rcParams pour définir la taille de la figure comme ci-dessous:

from matplotlib import rcParams

# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27

Plus de détails peuvent être trouvés dans documentation matplotlib

150
student

Vous pouvez définir le contexte sur poster ou définir manuellement fig_size.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(0)
n, p = 40, 8
d = np.random.normal(0, 2, (n, p))
d += np.log(np.arange(1, p + 1)) * -5 + 10


# plot
sns.set_style('ticks')
fig, ax = plt.subplots()
# the size of A4 paper
fig.set_size_inches(11.7, 8.27)
sns.violinplot(data=d, inner="points", ax=ax)    
sns.despine()

fig.savefig('example.png')

enter image description here

83
Jianxun Li

Notez que si vous essayez de passer à une méthode "au niveau de la figure" dans seaborn (par exemple, lmplot, catplot/factorplot, jointplot), vous pouvez et devez le spécifier. dans les arguments en utilisant height et aspect.

sns.catplot(data=df, x='xvar', y='yvar', 
    hue='hue_bar', height=8.27, aspect=11.7/8.27)

Voir https://github.com/mwaskom/seaborn/issues/488 et tracé avec Seaborn à l'aide de l'interface matplotlib orientée objet pour plus de détails sur le niveau de la figure les méthodes n'obéissent pas aux spécifications des axes.

39
elz

importez d'abord matplotlib et utilisez-le pour définir la taille de la figure

from matplotlib import pyplot as plt
import seaborn as sns

plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)
19
Gucci148

Pour ma parcelle (une parcelle factorielle sns), la réponse proposée ne fonctionnait pas bien.

Ainsi j'utilise

plt.gcf().set_size_inches(11.7, 8.27)

Juste après le complot avec Seaborn (donc pas besoin de passer une hache à Seaborn ou de changer les paramètres de rc).

12
head7

Cela fonctionnera aussi.

from matplotlib import pyplot as plt
import seaborn as sns    

plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
8
Mufaddal Tahir

Les principales réponses de Paul H et J. Li ne fonctionnent pas pour tous les types de personnages nés dans la mer. Pour le type FacetGrid (par exemple sns.lmplot()), utilisez les paramètres size et aspect.

Size change la hauteur et la largeur, tout en maintenant les proportions.

Aspect ne change que la largeur, en maintenant la hauteur constante.

Vous pouvez toujours obtenir votre taille désirée en jouant avec ces deux paramètres.

Crédit: https://stackoverflow.com/a/28765059/3901029

5
Chris

En plus de elz réponse concernant les méthodes "au niveau de la figure" qui renvoient des objets de grille multi-tracés, il est possible de définir explicitement la hauteur et la largeur de la figure (c'est-à-dire sans utiliser le rapport de format) en utilisant l'approche suivante:

import seaborn as sns 

g = sns.catplot(data=df, x='xvar', y='yvar', hue='hue_bar')
g.fig.set_figheight(8.27)
g.fig.set_figheight(11.7)
3
dmainz

Cela peut être fait en utilisant:

plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)
2
PSN