前言

如果说pandas 是numpy 的儿子,那matplotlib 包就是seaborn 的爸爸了。

也因此,儿子辈分的seaborn 和pandas 玩的很不错。(seaborn 善于处理pandas 中的表格文件)

另外,matplotlib 与pandas 其实也都自带一些绘图函数,为何还要用seaborn呢?

答案恐怕是让专业的包来做专业的事情吧。
image.png

另外,我们可以将作图的内容想象为一个白纸,而无论是pandas, matplotlib 还是seaborn,都是在上面作画。也正因此,三者对图像的修改都会对整体产生变化。比如用pandas做了一个简单的图,用seaborn修改风格,用matplotlib 添加一些文体……它们都是一个整体。

另外,我们要知道,seaborn 是来自matplotlib的,因此使用如果知道某些matplotlib的方法,也可以尝试在seaborn中使用,毕竟它们是一家人。

加载数据

除了可以通过pd 加载表格,seaborn 也提供了获得表格的方式。
.load_dataset('')

seaborn 常用元素选项

x,x轴数据。
y,y轴数据。
data,数据集。
hue,颜色区分图像。(自动添加标注) hue_order = [] ,修改hue 显示标注的顺序。 palette = {} ,字典存放指定分类的颜色,键为标注信息,值为对应自定义的颜色,同样也可以使用html 的颜色代码。
个人理解hue 可以实现matplotlib 中的color 和legend 的功能。
image.png
size, 点的大小。(适用于散点图)
style,点的样式。(适用于散点图)
alpha,透明度。

适合表现连续变量

散点图

虽然sns 有很强的画图功能,但其最终的图像展示部分还需要借助matplotlib,因此也需要导入matplotlib.pyplot。

  1. # Import Matplotlib and Seaborn
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4. # Change this scatter plot to have percent literate on the y-axis
  5. sns.scatterplot(x=gdp, y=phones)
  6. # Show plot
  7. plt.show()

image.png

线图

是与散点图类似的关系型图像。它更能体现变化的趋势,因为具备track 的功能。
image.png

如果线图中的同个x下有多个值(同个x 有多个对应的y),则会汇集于一个值并作图(默认为平均),并根据置信做出阴影部分(95%置信)。
image.png

相关参数

markers, 点的标记,可以设为True。
dashes,线段的样式,不做改变设为False。
ci,设定置信计算的值,比如’sd’ 表示标准差。或设为None,关闭阴影。

适合表现分类变量

条形图与计数图都适合表现分类变量,对应于连续变量使用 relplot , catplot 更适用于这方面。如果将分类变量换到y,seaborn 会自动识别,并将图像翻转(不过还是建议分类变量放在x轴噢)。

重要参数

order,设定x轴的顺序。
kind,设定图像。
ci,是否添加误差棒。

条形图

和mpl 中类似,但seaborn 中的条形图默认添加了误差棒。也可以设定ci 删除。

直方图

表现频数分布的图形。

# Display a Seaborn distplot
sns.distplot(df['Award_Amount'])
plt.show()

# Clear the distplot
plt.clf()

image.png

相关参数

kde,设置为False 可以还原为简单的直方图(去掉线段)。
kde_kws,用字典设定kde 参数,如 kde_kws = {'shade' : True} ,表示给线段覆盖区域添加阴影。
hist,False 可以去掉hist。
rug,True 添加rug,即图形底部的竖线,也可以用来表现数据的分布。(mini版的hist)
bin,设定柱子的宽度。

计数图

有点类似于matplotlib 中的直方图。

# Import Matplotlib and Seaborn
import matplotlib.pyplot as plt
import seaborn as sns

# Create count plot with region on the y-axis
sns.countplot(y=region)

# Show plot
plt.show()

image.png

箱线图

image.png
关于箱线图介绍,可以参考matplotlib 中的介绍:002. 使用matplotlib绘图

相关参数

sym,设定异常值处理, sym="" 可以去除。
whis, 设定“箱子”取值范围(默认25%与75%分为数)。
image.png

# Set the whiskers at the min and max values
sns.catplot(x="romantic", y="G3",
            data=student_data,
            kind="box",
            whis=[0, 100])

# Show plot
plt.show()

image.png

小提琴图

# Create a violinplot with the husl palette
sns.violinplot(data=df,
               x='Award_Amount',
               y='Model Selected',
               palette='husl')

plt.show()
plt.clf()

image.png

lv图

# Create a lvplot with the Paired palette and the Region column as the hue
sns.lvplot(data=df,
           x='Award_Amount',
           y='Model Selected',
           palette='Paired',
           hue='Region')

plt.show()
plt.clf()

image.png

点线图

点线图与箱线图都是反映分类变量间简单统计学差异的好图。只是差别在于,点线图能更直观反映二者中位数差异,且显示了95%的置信。而与条形图的区别,也是它可以更好的表现数值上的差异。
image.png

相关参数

estimator,默认下点线图上的点表示的是分组内的平均值,可以通过引入numpy包统计学函数,比如estimator = median , 更换为中位数。
capsize,修改errorbar 的帽子宽度。
ci,None 可以不要误差棒。
join,设为False 可以去除连接点的线段。

航线图

# Create the stripplot
sns.stripplot(data=df,
              x='Award_Amount',
              y='Model Selected',
              jitter=True)

plt.show()

image.png
jitter 选项可以为相同取值的点产生一个轻微的抖动(位移),使它们不覆盖在一起。

蜂群图

image.png

统计功能的图像

回归图

相当于是散点图+回归线,会为散点的数据拟合一条回归线。
image.png
.regplot()

另外,类似直方图中的kdeplot,回归图也有另外一个更厉害的选择—— lmplot 。不过需要注意的是,二者部分参数不共享(比如lm不支持marker)

# Create a regression plot with multiple rows
sns.lmplot(data=df,
           x="insurance_losses",
           y="premiums",
           row="Region")

# Show the plot
plt.show()

image.png

相关参数

marker,设定散点的样式,比如 '+'
order,设置多元回归大小。
x_bins,将x对应的数值分组, x_bins = 4,分成四组。
fit_reg,False 将去除回归线。

多元回归

image.png

分类变量进行回归

image.png

使用estimator 美化

image.png
上图中,将直接取分类下所有数值的平均值进行计算。

残差图

residplot,残差图,可以用来评价模型的合适程度。
image.pngimage.pngimage.png

image.png
image.png

创建多个图

类似matplotlib 中的subplot,seaborn也可以在同一个图像里创建多个子图像。
sns.relplot()

参数有:
kind,指定图像类型,scatter, line …
col,直接可以指定某列,根据列内容差异直接将图像分为左右两边。col_wrap 用于设定每行的列数,如 col_wrap = 2 ,即每行有两个图像。 col_order = [] 可以设定子图像顺序。(ps:col与row 的设定及使用和hue 非常相似)
image.png
row,直接可以指定某行,根据列内容差异直接将图像分为上下两边。
image.png

FacetGrid

image.png
image.png
第一步创建FacetGrid 更像是建立一个和数据集相关的画表,并指定分组条件。
接着通过在g.map 内指定创建指定的图形类型和其他参数,以进行绘图。

还有另外一种调用facetgrid 的方式。
image.png

PairGrid

如同它的名字一样,pairgrid 出现成对的图像。它可以用来非常方便的查看多个列之间数据的关系。
image.png
也可以自定义两边对角线的图形。
image.png

和facetgrid 一样,pairgrid 也有简单调用的方式。
image.png

# plot relationships between insurance_losses and premiums
sns.pairplot(data=df,
             vars=["insurance_losses", "premiums"],
             kind='reg',
             palette='BrBG',
             diag_kind = 'kde',
             hue='Region')

plt.show()
plt.clf()

image.png

JointGrid

image.png
非常漂亮,相比于PairGrid 的相等大小并列图片,JointGrid 更能突出重点。比如对于一组变量间的研究,中心使用散点图表现二者的关系,上方与右方使用直方图表现对应一边变量的分布情况。

可以使用 g.plot 直接指定中心与周边图像,也可以使用 g.plot_joint()g.plot_marginals() 分别指定。
image.png

jointgrid 也有简单调用的方式,使用jointplot()。
image.png

调整与修改图像

更动标题和标签

对于seaborn 中的图像对象,有两种类型,对待这两种类型,有不同的添加标题与标签的方式。
image.png
image.png
总的来说,可以制作多个坐标的是facetgrid,而单一坐标的是axessubplot。

facetgrid

g.fig.subtitle('')

通过设置y,可以调整标题位置,默认为1。

g.set(xlabel = , ylabel = ) 可以设定坐标轴边的label。

plt.xticks(rotation = ) 可以修改标注的角度。(使用matplotlib 的方法)

axessubplot

g.set.title('')
通过设置y,可以调整标题位置,默认为1。
可以将变量(表格中的列名)作为标题名,命名规则为’This is {col_name}’。

移除默认图框

sns.despine() ,默认清楚上与右侧边框,也可以手动设定,’left’ 可以移除左侧的。
image.png

自定义图像的风格

类似mpl 中的plt.style.use('xx'),sns 中也有,包括默认的 sns.set() ,或其他的sns.set_style("whitegrid")

另外,还可以使用seaborn 中的配色方案, sns.set_palette('RdBu')

还可以调整图像字体的大小。使用 sns.set_context()

修改seaborn 默认风格参数

sns.set(),可以修改seaborn 的默认风格。
比如可以修改参数, color_codes = True ,可以使用颜色代码进行颜色选择。
image.png

一些风格

  • whitegrid

image.png

  • ticks

image.png

  • darkgrid

image.png

调色板

image.png
image.png

查看当前画板

sns.paplot() 可以返回一个palette图像,而当我们用 sns.set_palette() 后,就可以画图以查看不同seaborn中的不同颜色或者不同的画板了。
image.png

定制自己的调色板

image.png

# Create the Purples palette
sns.palplot(sns.color_palette("Purples", 8))
plt.show()

ps:seaborn 自带的各种颜色主题还都蛮好看的。

image.png