如何更改seaborn图的图形大小?

Mic*_*ook 171 python seaborn

如何更改图像的大小以使其适合打印?

例如,我想使用A4纸,其横向尺寸为11.7英寸×8.27英寸.

stu*_*ent 172

您还可以通过在seaborn 方法中rc使用键将字典传递给参数来设置图形大小:'figure.figsize'set

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})
Run Code Online (Sandbox Code Playgroud)

其他替代可以是使用figure.figsizercParams设置的数字大小如下:

from matplotlib import rcParams

# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
Run Code Online (Sandbox Code Playgroud)

更多细节可以在matplotlib文档中找到

  • 可惜他们都没有在 Jupyter Lab 中制作任何情节。`fig, ax = pyplot.subplots(figsize=(20, 2)); a = sns.lineplot(ax=ax, x=..., y=...)` 相反,按预期工作。当这些参数在seaborn中应该很简单,因为经常使用,但需要使用“技巧”来设置时,我总是感到惊讶。 (4认同)
  • 与其他解决方案不同,此解决方案不假设某种方式来定义绘图.谢谢. (3认同)
  • 我的也不是 sns.boxplot (3认同)
  • 请注意,当您调用sns.set()时,它会将图形样式默认设置为sns默认样式,而不是matplotlib默认样式,例如,您的图形将突然具有带有白色网格的灰色背景–请参见:https:// seaborn。 pydata.org/tutorial/aesthetics.html。另外,这对我的绘图大小(sns.pairplot)没有任何影响。 (2认同)

Pau*_*l H 151

您需要提前创建matplotlib图和Axes对象,指定图形的大小:

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)
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案似乎不适用于后面的代码(不同类型的情节).有任何想法吗?我假设"mylib"只是一个存储数据的库,在这段代码中不需要:`fig,ax = pyplot.subplots(figsize =(12,6)); sns.jointplot(memoryPrice ['price'],memoryPrice ['Memory'])` (6认同)
  • 这个答案不适用于那些不接受斧头作为输入的绘图类型,例如“ sns.lmplot()”。 (4认同)
  • 应使用“height”和“aspect”参数设置seaborn中的绘图大小,如此处所述/sf/answers/3612171251/ (4认同)
  • 在@TMWP的情况下,此答案不起作用,因为jointplot是一种图形级方法。请参阅下面的答案。 (3认同)

Jia*_* Li 86

您可以设置上下文poster或手动设置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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这个答案不适用于那些不接受ax作为输入的情节类型,例如`sns.lmplot()` (3认同)

elz*_*elz 55

请注意,如果你正在试图通过一个"数字级别"的方法在seaborn(例如lmplot,catplot/ factorplot,jointplot),你可以而且应该在参数中指定使用这个heightaspect.

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

有关图级方法不遵守轴规范这一事实的更多详细信息,请参阅https://github.com/mwaskom/seaborn/issues/488使用matplotlib面向对象接口的seaborn绘图.

  • 这是迄今为止唯一可以正确处理不接受ax作为参数的sns图的答案。 (8认同)
  • 请注意,高度和方面控制单个“方面”(即子图)的尺寸。所以这不会直接调整完整的图形尺寸。 (3认同)
  • 另请参阅[此官方教程](https://seaborn.pydata.org/tutorial/function_overview.html#specifying-figure-sizes) (2认同)

小智 30

首先导入matplotlib并使用它来设置图形的大小

from matplotlib import pyplot as plt
import seaborn as sns

plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)
Run Code Online (Sandbox Code Playgroud)


Tre*_*ney 24

进口和数据

import seaborn as sns
import matplotlib.pyplot as plt

# load data
df = sns.load_dataset('penguins')
Run Code Online (Sandbox Code Playgroud)

sns.displot

  • 图形级图的大小可以使用height和/或aspect参数进行调整
  • 此外,可以通过访问对象并使用来dpi设置图形的fig.set_dpi()
p = sns.displot(data=df, x='flipper_length_mm', stat='density', height=4, aspect=1.5)
p.fig.set_dpi(100)
Run Code Online (Sandbox Code Playgroud)
  • 没有p.fig.set_dpi(100)

在此输入图像描述

  • p.fig.set_dpi(100)

在此输入图像描述

sns.histplot

  • 轴级图的大小可以通过figsize和/或进行调整dpi
# create figure and axes
fig, ax = plt.subplots(figsize=(6, 5), dpi=100)

# plot to the existing fig, by using ax=ax
p = sns.histplot(data=df, x='flipper_length_mm', stat='density', ax=ax)
Run Code Online (Sandbox Code Playgroud)
  • 没有dpi=100

在此输入图像描述

  • dpi=100

在此输入图像描述


Jer*_*110 15

# Sets the figure size temporarily but has to be set again the next plot
plt.figure(figsize=(18,18))

sns.barplot(x=housing.ocean_proximity, y=housing.median_house_value)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我的图表的 18x18 绘图


hea*_*ad7 14

对于我的情节(sns因子图),建议的答案不起作用。

因此我用

plt.gcf().set_size_inches(11.7, 8.27)
Run Code Online (Sandbox Code Playgroud)

紧随seaborn的情节之后(因此无需将斧头传递给seaborn或更改rc设置)。


Muf*_*hir 11

这也将起作用。

from matplotlib import pyplot as plt
import seaborn as sns    

plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
Run Code Online (Sandbox Code Playgroud)


rms*_*wrp 10

一些尝试过的方法:

import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=[15,7])
sns.boxplot(x="feature1", y="feature2",data=df, ax=ax) # where df would be your dataframe
Run Code Online (Sandbox Code Playgroud)

或者

import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=[15,7])
sns.boxplot(x="feature1", y="feature2",data=df) # where df would be your dataframe
Run Code Online (Sandbox Code Playgroud)


PSN*_*PSN 9

可以使用以下方法完成:

plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 6

保罗·H(Paul H)和李·李(J. Li)给出的头等答案并不适合所有类型的海洋人物。对于FacetGrid类型(例如sns.lmplot()),请使用sizeaspect参数。

Size 更改高度和宽度,同时保持宽高比。

Aspect 仅改变宽度,保持高度不变。

通过使用这两个参数,您始终可以获得所需的大小。

信用:https : //stackoverflow.com/a/28765059/3901029


小智 6

除了关于返回多图网格对象的“图形级别”方法的elz答案之外,还可以使用以下方法显式设置图形的高度和宽度(即不使用纵横比):

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)
Run Code Online (Sandbox Code Playgroud)

  • 也许 API 发生了变化,但对我来说它是 g.figure.set_figwidth 而不是 g.fig.set_figwidth。我正在使用 matplotlib 版本 3.1.0 和 seaborn 0.9.0 (2认同)