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()
height
e aspect
parametri come spiegato qui stackoverflow.com/a/51602446/2412831
Puoi anche impostare la dimensione della figura passando il dizionario al rc
parametro con la chiave 'figure.figsize'
nel set
metodo seaborn :
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
Un'altra alternativa potrebbe essere l'uso figure.figsize
di rcParams
per 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 poster
impostare 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 height
e 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.FacetGrid
che imposterebbe una dimensione della figura in base a un valore calcolato (impostato da height
e 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_figwidth
e set_figheight
funziona 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 FacetGrid
tipo (ad esempio sns.lmplot()
), utilizzare il parametro size
e 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.