如何更改 seaborn 图表或图形级别绘图的图像大小

494
如何调整图片的尺寸以适合打印呢?
举个例子,我想使用A4纸,它的尺寸是11.7英寸乘以8.27英寸,横向排列。
14个回答

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

一个18x18的图形绘制


plt.figure(figsize=(X,Y))在Jupyter扩展中的VS Code和seaborn 0.12.2中没有任何作用。 - sharchaea
plt.figure(figsize=(X,Y))在VS Code的Jupyter扩展和seaborn 0.12.2中似乎没有任何作用。 - undefined

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

或者

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

9
Paul H和J. Li提供的顶级答案并不适用于所有类型的seaborn图形。对于FacetGrid类型(例如sns.lmplot()),请使用size和aspect参数。
Size会改变高度和宽度,保持纵横比。
Aspect仅更改宽度,保持高度不变。
您可以通过调整这两个参数来获得所需的大小。
来源:https://dev59.com/NF8e5IYBdhLWcg3wCGy_#28765059

0

更改坐标轴级别的绘图大小

Seaborn具有返回Axes对象的绘图函数。可以使用set()set_theme()函数(如niraj的答案中所示)全局更改这些绘图的大小。

import seaborn as sns
df = sns.load_dataset("tips")

sns.set_theme(rc={'figure.figsize': (8.27, 11.7)})
ax = sns.regplot(df, x='total_bill', y='tip')

这些图表的大小也可以通过改变包含这个Axes的底层matplotlib图形的大小来改变,使用set_size_inches()。请注意,dmainz's answer的答案也可以实现类似的效果,但是它是通过分别设置宽度和高度来实现的;而这种方法可以在一个函数调用中同时设置它们。如果你的seaborn图表是在其他地方创建的,并且你想要将其大小更改为你想要的英寸大小,这将非常有用。
ax = sns.regplot(df, x='total_bill', y='tip')     # the default figsize is 6.4"x4.8"
ax.figure.set_size_inches(8.27, 11.7)             # now it becomes 8.27"x11.7"

如果你的seaborn图是由不返回值的函数生成的,那么你仍然可以通过访问当前的图形对象plt.gcf()来进行更改。例如:
import matplotlib.pyplot as plt

sns.regplot(df, x='total_bill', y='tip')
plt.gcf().set_size_inches(8.27, 11.7)

请注意,set()set_theme()会全局改变图形的大小,这可能不是您所期望的,如果您只想设置单个图形的特定大小并对其他图形使用默认设置。在这种情况下,您可以使用上下文管理器来更改单个图形的大小。
with plt.rc_context(rc={'figure.figsize': (8.27, 11.7)}):
    sns.regplot(df, x='total_bill', y='tip')

更改图形/ FacetGrid 大小

与上述更改底层 matplotlib 图形大小类似,对于 FacetGrid 对象也可以进行相同的操作。以下是一个示例:

g = sns.lmplot(data=df, x='total_bill', y='tip')  # the default figsize is 5"x5"
g.fig.set_size_inches(8.27, 11.7)                 # now it becomes 8.27"x11.7"

请注意,如果您的 seaborn 图形是由不返回值的函数生成的,那么您仍然可以通过访问当前图形对象 plt.gcf() 来进行更改。
sns.lmplot(data=df, x='total_bill', y='tip')
plt.gcf().set_size_inches(8.27, 11.7)

提议的方法似乎与 https://stackoverflow.com/a/53725768/7758804 和 https://stackoverflow.com/a/31597200/7758804 相同。 - undefined
@TrentonMcKinney 没错,尤其是第一个答案似乎使用了我在这里打算使用的方法。我可能应该删除我回答中与那个代码相同的部分(或者至少添加到那个答案的链接)。说实话,在我发布我的回答之前,我没有看到这些答案(这是我的错),但我仍然觉得我的回答更好地解释了它可能有用的不同方式。此外,我展示了不同的访问图形的方法,以设置其大小(以及上下文管理器),这在这种情况下可能很有用。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接