## 问题：如何更改海图的图形大小？

How do I change the size of my image so it’s suitable for printing?

For example, I’d like to use to A4 paper, whose dimensions are 11.7 inches by 8.27 inches in landscape orientation.

## 回答 0

``````from matplotlib import pyplot
import seaborn

import mylib

a4_dims = (11.7, 8.27)
fig, ax = pyplot.subplots(figsize=a4_dims)
seaborn.violinplot(ax=ax, data=df, **violin_options)``````

You need to create the matplotlib Figure and Axes objects ahead of time, specifying how big the figure is:

``````from matplotlib import pyplot
import seaborn

import mylib

a4_dims = (11.7, 8.27)
fig, ax = pyplot.subplots(figsize=a4_dims)
seaborn.violinplot(ax=ax, data=df, **violin_options)
``````

## 回答 1

``````import seaborn as sns

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

``````from matplotlib import rcParams

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

You can also set figure size by passing dictionary to `rc` parameter with key `'figure.figsize'` in seaborn `set` method:

``````import seaborn as sns

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

Other alternative may be to use `figure.figsize` of `rcParams` to set figure size as below:

``````from matplotlib import rcParams

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

More details can be found in matplotlib documentation

## 回答 2

``````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')`````` You can set the context to be `poster` or manually set `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.catplot(data=df, x='xvar', y='yvar',
hue='hue_bar', height=8.27, aspect=11.7/8.27)``````

Note that if you are trying to pass to a “figure level” method in seaborn (for example `lmplot`, `catplot` / `factorplot`, `jointplot`) you can and should specify this within the arguments using `height` and `aspect`.

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

See https://github.com/mwaskom/seaborn/issues/488 and Plotting with seaborn using the matplotlib object-oriented interface for more details on the fact that figure level methods do not obey axes specifications.

## 回答 4

``````from matplotlib import pyplot as plt
import seaborn as sns

plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)``````

first import matplotlib and use it to set the size of the figure

``````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

``````from matplotlib import pyplot as plt
import seaborn as sns

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

This shall also work.

``````from matplotlib import pyplot as plt
import seaborn as sns

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

## 回答 6

``````plt.figure(figsize=(15,8))

This can be done using:

``````plt.figure(figsize=(15,8))
``````

## 回答 7

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

For my plot (a sns factorplot) the proposed answer didn’t works fine.

Thus I use

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

Just after the plot with seaborn (so no need to pass an ax to seaborn or to change the rc settings).

## 回答 8

``````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)``````

In addition to elz answer regarding “figure level” methods that return multi-plot grid objects it is possible to set the figure height and width explicitly (that is without using aspect ratio) using the following approach:

``````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)
``````

## 回答 9

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

`Aspect` 只改变宽度，保持高度不变。

The top answers by Paul H and J. Li do not work for all types of seaborn figures. For the `FacetGrid` type (for instance `sns.lmplot()`), use the `size` and `aspect` parameter.

`Size` changes both the height and width, maintaining the aspect ratio.

`Aspect` only changes the width, keeping the height constant.

You can always get your desired size by playing with these two parameters.