¿Cómo cambio el tamaño de mi imagen para que sea adecuada para imprimir?
Por ejemplo, me gustaría usar para papel A4, cuyas dimensiones son 11.7 pulgadas por 8.27 pulgadas en orientación horizontal.
¿Cómo cambio el tamaño de mi imagen para que sea adecuada para imprimir?
Por ejemplo, me gustaría usar para papel A4, cuyas dimensiones son 11.7 pulgadas por 8.27 pulgadas en orientación horizontal.
Respuestas:
Debe crear los objetos Matplotlib Figure y Axes con anticipación, especificando qué tan grande es 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
y aspect
como se explica aquí stackoverflow.com/a/51602446/2412831
También puede establecer el tamaño de la figura pasando el diccionario al rc
parámetro con la clave 'figure.figsize'
en el set
método seaborn :
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
Otra alternativa puede ser utilizar figure.figsize
de rcParams
establecer tamaño de figura a continuación:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
Se pueden encontrar más detalles en la documentación de matplotlib
.set()
antes.set_style()
Puede establecer el contexto para ser poster
o establecer 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()
Tenga en cuenta que si está intentando pasar a un método de "nivel de figura" en seaborn (por ejemplo lmplot
, catplot
/ factorplot
, jointplot
) puede y debe especificar esto dentro de los argumentos usando height
y aspect
.
sns.catplot(data=df, x='xvar', y='yvar',
hue='hue_bar', height=8.27, aspect=11.7/8.27)
Consulte https://github.com/mwaskom/seaborn/issues/488 y Plotting with seaborn utilizando la interfaz orientada a objetos matplotlib para obtener más detalles sobre el hecho de que los métodos de nivel de figura no obedecen las especificaciones de los ejes.
Esto también funcionará.
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
Para mi argumento (un diagrama de factor sns) la respuesta propuesta no funcionó bien.
Así uso
plt.gcf().set_size_inches(11.7, 8.27)
Justo después de la trama con seaborn (por lo que no es necesario pasar un hacha a seaborn o cambiar la configuración de 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
que establecería un tamaño de figura de acuerdo con un valor calculado (establecido por height
y aspect
) y cambiaría el tamaño de la figura directamente después de que el trazado marino nazca. Y puede ocurrir otro ajuste fino de la trama después de cambiar el tamaño de la figura
Además de la respuesta de elz con respecto a los métodos de "nivel de figura" que devuelven objetos de cuadrícula de múltiples gráficos , es posible establecer la altura y el ancho de la figura explícitamente (es decir, sin usar la relación de aspecto) utilizando el siguiente enfoque:
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
y set_figheight
funcionan bien para objetos de cuadrícula. >>> import seaborn >>> import matplotlib.pyplot como pyplot >>> tips = seaborn.load_dataset ("tips") >>> g = seaborn.FacetGrid (tips, col = "time", row = "fumador") >>> g = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
Las principales respuestas de Paul H y J. Li no funcionan para todo tipo de figuras nacidas en el mar. Para el FacetGrid
tipo (por ejemplo sns.lmplot()
), use el parámetro size
y aspect
.
Size
cambia tanto la altura como el ancho, manteniendo la relación de aspecto.
Aspect
solo cambia el ancho, manteniendo la altura constante.
Siempre puede obtener el tamaño deseado jugando con estos dos parámetros.