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

时间:2015-07-23 17:43:33

标签: python seaborn

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

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

12 个答案:

答案 0 :(得分:130)

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

import seaborn as sns

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

其他替代方法可能是使用figure.figsize的{​​{1}}来设置数字大小,如下所示:

rcParams

更多详情可在matplotlib documentation

中找到

答案 1 :(得分:123)

您需要提前创建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)

答案 2 :(得分:80)

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

enter image description here

答案 3 :(得分:30)

请注意,如果您尝试通过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/488Plotting with seaborn using the matplotlib object-oriented interface

答案 4 :(得分:13)

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

答案 5 :(得分:10)

这可以使用:

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

答案 6 :(得分:7)

对于我的情节(sns因子图),建议的答案无法正常工作。

我用

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

就在与seaborn一起的情节之后(因此无需将斧头传递给seaborn或更改rc设置)。

答案 7 :(得分:5)

Paul H和J. Li给出的最高答案并不适用于所有类型的海洋人物。对于from itertools import groupby from operator import itemgetter list_of_num = [1,3,4,5,6,10,11,13,15,17,18] for _, value in groupby(enumerate(list_of_num), lambda i_x: i_x[0] - i_x[1]): collapsed_nums = map(itemgetter(1), value) 类型(例如FacetGrid),请使用sns.lmplot()size参数。

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

Size仅更改宽度,保持高度不变。

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

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

答案 8 :(得分:5)

这也将起作用。

from matplotlib import pyplot as plt
import seaborn as sns    

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

答案 9 :(得分:2)

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

<form method="POST" name="hiddenform" action="ms-appx-web://Microsoft.AAD.BrokerPlugin/d3590ed6-52b3-4102-aeff-aad2292ab01c"><input type="hidden" name="error" value="invalid_resource" />

   <input type="hidden" name="error_description" value="AADSTS500011: The resource principal named https://dev-o365-vk.xxxxxxxx.com/ was not found in the tenant named 1742xxd3-07xx-xxxx-xxxx-7f5d28986xx3. 
   This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.
   Trace ID: 67faxx5-bbf7-4dd4-8d52-xxxxx
   Correlation ID: 13xxe9f1-350b-40fd-bd6b-xxxxx
   Timestamp: 2019-07-09 12:06:04Z" />

答案 10 :(得分:1)

# 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()

An 18x18 plot of my graph

答案 11 :(得分:0)

一些尝试过的方法:

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

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