如何更改 seaborn 轴或图形级别图的图形大小
How to change the figure size of a seaborn axes or figure level plot
如何更改图像的大小以使其适合打印?
例如,我想使用横向尺寸为 11.7 英寸 x 8.27 英寸的 A4 纸。
您可以将上下文设置为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')
您需要提前创建 matplotlib Figure 和 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)
您还可以通过在 seaborn set
方法中使用键 'figure.figsize'
将字典传递给 rc
参数来设置图形大小:
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
其他替代方法可能是使用 rcParams
的 figure.figsize
来设置图形大小,如下所示:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
中找到更多详细信息
首先导入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)
请注意,如果您尝试传递给 seaborn 中的 "figure level" 方法(例如 lmplot
、catplot
/ factorplot
、jointplot
)您可以并且应该使用 height
和 aspect
.
在参数中指定它
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 and Plotting with seaborn using the matplotlib object-oriented interface。
Paul H 和 J. Li 的最佳答案并不适用于所有类型的海洋人物。对于 FacetGrid
类型(例如 sns.lmplot()
),使用 size
和 aspect
参数。
Size
更改高度和宽度,保持纵横比。
Aspect
只改变宽度,保持高度不变。
您始终可以通过调整这两个参数来获得您想要的尺寸。
来源:
对于我的情节(一个 sns 因子图),建议的答案并不适用。
所以我用
plt.gcf().set_size_inches(11.7, 8.27)
就在 seaborn 的情节之后(因此无需将斧头传递给 seaborn 或更改 rc 设置)。
这也应该有效。
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
除了 elz 关于 "figure level" 方法的回答之外 return multi-plot 网格对象可以设置图形的高度和宽度使用以下方法显式(即不使用纵横比):
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)
这可以通过以下方式完成:
plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)
# 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()
一些尝试过的方法:
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
- 调整图的大小取决于图是否是 图级图,如
seaborn.displot
, or an axes-level plot like seaborn.histplot
。 此答案适用于任何图形或轴水平图。
seaborn
是 matplotlib
的高级 API,因此 seaborn 使用 matplotlib 方法
- 测试于
python 3.8.12
、matplotlib 3.4.3
、seaborn 0.11.2
进口和数据
import seaborn as sns
import matplotlib.pyplot as plt
# load data
df = sns.load_dataset('penguins')
sns.displot
- 可以使用
height
and/or aspect
参数调整图级绘图的大小
- 此外,可以通过访问
fig
对象并使用 .set_dpi()
来设置图形的 dpi
p = sns.displot(data=df, x='flipper_length_mm', stat='density', height=4, aspect=1.5)
p.fig.set_dpi(100)
- 没有
p.fig.set_dpi(100)
- 和
p.fig.set_dpi(100)
sns.histplot
- 可以使用
figsize
and/or 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)
- 没有
dpi=100
- 和
dpi=100
如何更改图像的大小以使其适合打印?
例如,我想使用横向尺寸为 11.7 英寸 x 8.27 英寸的 A4 纸。
您可以将上下文设置为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')
您需要提前创建 matplotlib Figure 和 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)
您还可以通过在 seaborn set
方法中使用键 'figure.figsize'
将字典传递给 rc
参数来设置图形大小:
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
其他替代方法可能是使用 rcParams
的 figure.figsize
来设置图形大小,如下所示:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
中找到更多详细信息
首先导入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)
请注意,如果您尝试传递给 seaborn 中的 "figure level" 方法(例如 lmplot
、catplot
/ factorplot
、jointplot
)您可以并且应该使用 height
和 aspect
.
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 and Plotting with seaborn using the matplotlib object-oriented interface。
Paul H 和 J. Li 的最佳答案并不适用于所有类型的海洋人物。对于 FacetGrid
类型(例如 sns.lmplot()
),使用 size
和 aspect
参数。
Size
更改高度和宽度,保持纵横比。
Aspect
只改变宽度,保持高度不变。
您始终可以通过调整这两个参数来获得您想要的尺寸。
来源:
对于我的情节(一个 sns 因子图),建议的答案并不适用。
所以我用
plt.gcf().set_size_inches(11.7, 8.27)
就在 seaborn 的情节之后(因此无需将斧头传递给 seaborn 或更改 rc 设置)。
这也应该有效。
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
除了 elz 关于 "figure level" 方法的回答之外 return multi-plot 网格对象可以设置图形的高度和宽度使用以下方法显式(即不使用纵横比):
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)
这可以通过以下方式完成:
plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)
# 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()
一些尝试过的方法:
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
- 调整图的大小取决于图是否是 图级图,如
seaborn.displot
, or an axes-level plot likeseaborn.histplot
。 此答案适用于任何图形或轴水平图。 seaborn
是matplotlib
的高级 API,因此 seaborn 使用 matplotlib 方法- 测试于
python 3.8.12
、matplotlib 3.4.3
、seaborn 0.11.2
进口和数据
import seaborn as sns
import matplotlib.pyplot as plt
# load data
df = sns.load_dataset('penguins')
sns.displot
- 可以使用
height
and/oraspect
参数调整图级绘图的大小 - 此外,可以通过访问
fig
对象并使用.set_dpi()
来设置图形的
dpi
p = sns.displot(data=df, x='flipper_length_mm', stat='density', height=4, aspect=1.5)
p.fig.set_dpi(100)
- 没有
p.fig.set_dpi(100)
- 和
p.fig.set_dpi(100)
sns.histplot
- 可以使用
figsize
and/ordpi
调整轴级图的大小
# 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)
- 没有
dpi=100
- 和
dpi=100