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


Answers:


195

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

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)

7
该解决方案似乎不适用于后面的代码(不同类型的绘图)。有任何想法吗?我假设“ mylib”只是一个存储数据的库,在此代码中不需要:`fig,ax = pyplot.subplots(figsize =(12,6)); sns.jointplot(memoryPrice ['price'],memoryPrice ['Memory'])`
TMWP

3
在@TMWP的情况下,此答案不起作用,因为jointplot是一种图形级方法。请参阅下面的答案。
elz

5
此答案不适用于那些不接受斧头作为输入的绘图类型,例如sns.lmplot()
Chris

2
seaborn的地块大小应使用heightaspect参数来设置,如此处所述stackoverflow.com/a/51602446/2412831
LeandroOrdonez,

@LeandroOrdonez不适用于轴级功能。
保罗H

233

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

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})

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

from matplotlib import rcParams

# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27

可以在matplotlib文档中找到更多详细信息


5
与其他解决方案不同,此解决方案没有采用定义绘图的特定方法。谢谢。
LoMaPh

6
请注意,当您调用sns.set()时,它会将图形样式默认设置为sns默认样式,而不是matplotlib默认样式,例如,您的图形将突然具有带有白色网格的灰色背景–参见此处:seaborn.pydata.org/ tutorial / aesthetics.html。另外,这对我的绘图大小(sns.pairplot)没有任何影响。
梅利莎(Melissa)

也不属于sns.boxplot
Gordon

感谢@Melissa。这使我意识到我必须叫.set().set_style()
jorijnsmit

89

您可以将上下文设置为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')

在此处输入图片说明


3
此答案不适用于那些不接受斧头作为输入的绘图类型,例如sns.lmplot()
Chris

为了扩展克里斯的答案,一些海洋图会生成具有多个轴的合成图形,因此它们不能将单个轴作为参数。
Marmaduke

73

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

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

请参阅https://github.com/mwaskom/seaborn/issues/488使用matplotlib面向对象的界面使用seaborn进行绘图,以了解有关图形级方法不遵守轴规格的事实的更多详细信息。


11
这是迄今为止唯一可以正确处理不接受ax作为参数的sns图的答案。
梅利莎(Melissa)

请注意,高度和长宽比可控制单个“构面”(即子图)的尺寸。因此,这不会直接调整完整的图形尺寸。
伯尼

43

首先导入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)

19

这也将起作用。

from matplotlib import pyplot as plt
import seaborn as sns    

plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)

19

可以使用以下方法完成:

plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)

16

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

因此我用

plt.gcf().set_size_inches(11.7, 8.27)

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


1
这是唯一适用于FacetGrid的解决方案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")
Nicolas78 '19

同样在这里。似乎sns.FacetGrid可以根据计算值(由height和设置aspect)设置图形大小,并在进行海底绘图后立即更改图形大小。更改图形大小后,还可以对图进行其他精细调整
Yunting Zhao

16

除了关于返回多图网格对象的“图形级别”方法的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)

set_figwidthset_figheight适用于网格对象。>>>导入seaborn >>>导入matplotlib.pyplot作为pyplot >>>技巧= 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)
Paul Rougieux

1
也许API发生了变化,但对我而言,它是g.figure.set_figwidth而不是g.fig.set_figwidth。我正在使用matplotlib版本3.1.0和seaborn 0.9.0
NateW

6

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

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.