Comment puis-je modifier la taille de mon image pour qu'elle soit adaptée à l'impression?
Par exemple, je voudrais utiliser du papier A4, dont les dimensions sont de 11,7 pouces par 8,27 pouces en orientation paysage.
Comment puis-je modifier la taille de mon image pour qu'elle soit adaptée à l'impression?
Par exemple, je voudrais utiliser du papier A4, dont les dimensions sont de 11,7 pouces par 8,27 pouces en orientation paysage.
Réponses:
Vous devez créer à l'avance les objets Figure et Axes matplotlib, en spécifiant 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)
sns.lmplot()
heightet aspectcomme expliqué ici stackoverflow.com/a/51602446/2412831
Vous pouvez également définir la taille de la figure en passant le dictionnaire au rcparamètre avec la clé 'figure.figsize'dans la setméthode seaborn :
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
Autre alternative peut être d'utiliser figure.figsizede rcParamsla taille de la figure ci - dessous ensemble comme:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
Plus de détails peuvent être trouvés dans la documentation de matplotlib
.set()avant.set_style()
Vous pouvez définir le contexte sur posterou 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')
sns.lmplot()
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 heightet 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 Plotting with seaborn à l'aide de l'interface orientée objet matplotlib pour plus de détails sur le fait que les méthodes au niveau des figures n'obéissent pas aux spécifications des axes.
Cela fonctionnera également.
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
Pour mon intrigue (un facteur factoriel 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 l'intrigue avec seaborn (donc pas besoin de passer une hache à seaborn ou de changer les paramètres rc).
python g = sns.FacetGrid(df.set_index('category'), col="id") pyplot.gcf().set_size_inches(11.7, 8.27) g.map(lambda data, color: data.plot.barh(color=color), "count")
sns.FacetGridune taille de figure en fonction d'une valeur calculée (définie par heightet aspect) et que la modification de la taille de la figure directement après le tracé de Seaborn fonctionne. Et un autre réglage fin de l'intrigue peut se produire après avoir changé la taille de la figure
En plus de la réponse d' elz concernant les méthodes "au niveau de la figure" qui retournent des objets de grille multi-tracé, il est possible de définir la hauteur et la largeur de la figure de manière explicite (c'est-à-dire sans utiliser le rapport hauteur / largeur) en utilisant l'approche suivante:
import seaborn as sns
g = sns.catplot(data=df, x='xvar', y='yvar', hue='hue_bar')
g.fig.set_figwidth(8.27)
g.fig.set_figheight(11.7)
set_figwidthet set_figheightfonctionnent bien pour les objets de la grille. >>> importez seaborn >>> importez matplotlib.pyplot comme pyplot >>> tips = seaborn.load_dataset ("tips") >>> g = seaborn.FacetGrid (tips, col = "time", row = "smoker") >>> g = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
Les meilleures réponses de Paul H et J. Li ne fonctionnent pas pour tous les types de personnages nés de la mer. Pour le FacetGridtype (par exemple sns.lmplot()), utilisez le paramètre sizeet aspect.
Size modifie à la fois la hauteur et la largeur, en conservant le rapport hauteur / largeur.
Aspect ne change que la largeur, en gardant la hauteur constante.
Vous pouvez toujours obtenir la taille souhaitée en jouant avec ces deux paramètres.