Come posso modificare le dimensioni della mia immagine in modo che sia adatta alla stampa?
Ad esempio, vorrei utilizzare la carta A4, le cui dimensioni sono 11,7 pollici per 8,27 pollici in orientamento orizzontale.
Come posso modificare le dimensioni della mia immagine in modo che sia adatta alla stampa?
Ad esempio, vorrei utilizzare la carta A4, le cui dimensioni sono 11,7 pollici per 8,27 pollici in orientamento orizzontale.
Risposte:
È necessario creare in anticipo gli oggetti Figure e Axes matplotlib, specificando quanto è grande la figura:
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()
heighte aspectparametri come spiegato qui stackoverflow.com/a/51602446/2412831
Puoi anche impostare la dimensione della figura passando il dizionario al rcparametro con la chiave 'figure.figsize'nel setmetodo seaborn :
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
Un'altra alternativa potrebbe essere l'uso figure.figsizedi rcParamsper impostare la dimensione della figura come di seguito:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
Maggiori dettagli sono disponibili nella documentazione di matplotlib
.set()prima.set_style()
È possibile impostare il contesto da posterimpostare o impostare manualmente 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()
Si noti che se si sta tentando di passare a un metodo di "livello di figura" in Seaborn (ad esempio lmplot, catplot/ factorplot, jointplot) è possibile e deve specificarlo negli argomenti utilizzando heighte aspect.
sns.catplot(data=df, x='xvar', y='yvar',
hue='hue_bar', height=8.27, aspect=11.7/8.27)
Vedere https://github.com/mwaskom/seaborn/issues/488 e Tracciare con Seaborn usando l'interfaccia orientata agli oggetti matplotlib per maggiori dettagli sul fatto che i metodi a livello di figura non obbediscono alle specifiche degli assi.
Anche questo dovrebbe funzionare.
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
Per la mia trama (un fattore grafico sns) la risposta proposta non ha funzionato bene.
Quindi io uso
plt.gcf().set_size_inches(11.7, 8.27)
Subito dopo la trama con Seaborn (quindi non è necessario passare un'ascia a Seaborn o modificare le impostazioni 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.FacetGridche imposterebbe una dimensione della figura in base a un valore calcolato (impostato da heighte aspect) e modificando la dimensione della figura direttamente dopo il disegno del neonato funzionerà. E dopo la modifica delle dimensioni della figura può accadere un'altra messa a punto della trama
Oltre alla risposta elz relativa ai metodi di "livello di figura" che restituiscono oggetti griglia multiplot, è possibile impostare in modo esplicito l'altezza e la larghezza della figura (ovvero senza utilizzare le proporzioni) utilizzando il seguente approccio:
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_figwidthe set_figheightfunziona bene per gli oggetti della griglia. >>> importa seaborn >>> importa matplotlib.pyplot come pyplot >>> tips = seaborn.load_dataset ("tips") >>> g = seaborn.FacetGrid (tips, col = "time", row = "fumatore") >>> g = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
Le risposte migliori di Paul H e J. Li non funzionano per tutti i tipi di figure marine. Per il FacetGridtipo (ad esempio sns.lmplot()), utilizzare il parametro sizee aspect.
Size cambia sia l'altezza che la larghezza, mantenendo le proporzioni.
Aspect cambia solo la larghezza, mantenendo l'altezza costante.
Puoi sempre ottenere la dimensione desiderata giocando con questi due parametri.