如何更改海上轴或图形水平图的图形大小

我如何改变我的图像的大小,使其适合打印?

例如,我想使用A4纸,它的尺寸是11.7英寸乘8.27英寸。

1065242 次浏览

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

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

其他替代方法可能是使用rcParamsfigure.figsize来设置图形大小,如下所示:

from matplotlib import rcParams


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

更多细节可以在matplotlib文档中找到

首先导入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中传递一个“图形级”方法(例如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绘图了解更多关于图形级方法不遵守轴规范的细节。

Paul H和J. Li给出的最重要的答案并不适用于所有类型的海上人物。对于FacetGrid类型(例如sns.lmplot()),使用sizeaspect参数。

Size改变高度和宽度,保持纵横比。

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

您总是可以通过使用这两个参数来获得您想要的大小。

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

对于我的图(一个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回答关于返回多绘图网格对象的“图形级别”方法外,还可以使用以下方法显式设置图形的高度和宽度(即不使用纵横比):

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

An 18x18 plot of my graph

一些尝试过的方法:

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

导入和数据

import seaborn as sns
import matplotlib.pyplot as plt


# load data
df = sns.load_dataset('penguins')

sns.displot

  • 图形级图形的大小可以用height和/或aspect参数来调整
  • 此外,图形的dpi可以通过访问fig对象并使用.set_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)

enter image description here

  • p.fig.set_dpi(100)

enter image description here

sns.histplot

  • 坐标轴级图的大小可以用figsize和/或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

enter image description here

  • dpi=100

enter image description here