写在开头:今天分享的是关于数据相关性的绘图方法,参考文献会附在文章最后的链接。
前文回顾:
第一节分享了Seaborn绘图的整体颜色与风格比例调控,可点击链接查看。
python数据可视化之Seaborn(一)
第二节分享了连续、分类、离散数据的绘图颜色的方法,可点击链接查看。
python数据可视化之Seaborn(二)
第三节分享了对于数据分布的绘图方法,可点击链接查看。
python数据可视化之Seaborn(三)
Seaborn可视化内容安排
在Seaborn的学习中安排如下,
一、画风设置:会简单介绍一下绘图风格(一)与颜色风格(二)的设置;
二、绘图技巧:这里会介绍数据集(三)、相关数据(四)、分类数据(五)、线性关系(六)可视化的相关内容;
三、结构网络:本节主要介绍数据识别结构网络的绘图(七)。
二、Seaborn绘图技巧
相关数据
在统计分析中最常用的一个步骤去理解数据就是去了解数据的相关性,比如一般在建立回归模型之前,会建立一个二维散点图来观察数据之间表现的一种关系,进行初步判断,所以上一节说了查看数据分布的方法,这一节再来讲一讲查看数据相关的办法。本节使用的函数主要是relplot(),这个函数可以通过FacetGrid方法进行调参,内置在其中的比较方便。下面首先加载这次需要使用到的包和整体参数。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set_style("whitegrid")
np.random.seed(42)
散点图绘制
散点图是了解两变量数据最直接的方法,可以快速查看到变量之间的相关性、异常值与杠杆值等等,所以在探究变量之间关系的时候绘制个散点图还是很有必要的,利用seaborn自带数据集tips进行绘制。
tips = sns.load_dataset("tips")
sns.relplot(x="tip", y="total_bill", data=tips)
#tips.head() 可以先查看一下数据变量有哪些
在relplot函数中有hue(当输入为离散值那么就改变类别颜色,如果是连续值那么就用连续型的颜色变化)、size和style三个控制参数,控制图形不同类别的形状颜色或者大小。
sns.relplot(x="tip", y="total_bill", hue="sex", style="smoker", data=tips)
上图的颜色分别代表男性和女性,标记形代表是否是烟民,虽然这张图涵盖大量的信息,但是有时一张图信息过多往往难以阅读。还有一个参数是size,在将size参数前,我们还可以根据hue输入连续值来绘制连续颜色图,这里可以在palette里面直接调节cubehelix色板旋转,
sns.relplot(x="tip", y="total_bill", hue="size", palette="ch:r=0.8,l=1", data=tips)
size控制参数可以控制输出散点图的标记大小,随着圆圈越大意味着其size值越大,sizes参数还可以设着圆圈半径变化范围。
sns.relplot(x="total_bill", y="tip", size="size", sizes=(15, 150),data=tips)
以上就是散点图的绘制,下面进行线图的绘制。
线图绘制
线图跟散点图有不同,散点图更适合分散一点的数据,而线图表示的是一种连续性,同样能够显示出数据的相关关系,但对于离群值的绘图效果不是很友好,也是基础绘图之一。
这里的cumsum()函数时累计加和函数默认按列累计依次加和,
df = pd.DataFrame(dict(time=np.arange(500),
value=np.random.randn(500).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df, color=sns.color_palette("RdBu")[2])
g.fig.autofmt_xdate()
relplot线图的绘制会自动按照x的值进行排序,如果不需要的话可以将参数sort调整为False,这里就不做展示。在一般的线图中,如果一个x对应多个y,那我们希望能够绘制出这里个x对应的y的区间,这个区间是我们所谓的置信区间,我们载入fmri数据集进行演示,
fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", y="signal", kind="line", data=fmri)
当然如果想去掉置信区间仅显示均值线,那可以调节参数ci为None,也可以设为sd以一个标准差为置信区间宽度
![](/qrcode.jpg)
sns.relplot(x="timepoint", y="signal", ci=None, kind="line", data=fmri)
sns.relplot(x="timepoint", y="signal", ci="sd", kind="line", data=fmri)
绘制完单一线图后,我们还可以绘制分类的线图,同样有hue、size、style三个参数进行控制,还可以通过markers=True添加每个点的标签,
sns.relplot(y="total_bill", x="size", hue="time",style="day",kind="line",markers=True, data=tips)
当然还可以通过query()函数来筛选部分数据进行绘图,
dots = sns.load_dataset("dots").query("align == 'dots'")
palette = sns.cubehelix_palette(light=.8,start=-.6, rot=-0.75)
sns.relplot(x="time", y="firing_rate",
hue="coherence", style="choice",palette=palette,
kind="line", data=dots);
还可以通过调节size来改变线的粗细,这里建议仅选择类别少的变量作为size的调节变量不然线的粗细过于接近的话,就很难起到区分的作用,
palette = sns.cubehelix_palette(light=.3,start=-.2, rot=-0.75)
sns.relplot(x="time", y="firing_rate",
hue="coherence", size="choice",palette=palette,
kind="line", data=dots);
在线图这个最后我们来绘制一下时间序列,这个图在对传统金融过票市场研究,或者一些计量研究有着帮助作用,
df = pd.DataFrame(dict(time=pd.date_range("2019-1-1", periods=300),
value=np.random.randn(300).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate() #调节横轴标签方向
网格绘图
所谓网格绘图就是通过其特征绘制不同特征下的相关图,可以使用col或者row参数,将按照对应类别进行画布的分隔,
sns.relplot(x="total_bill", y="tip", hue="smoker",
col="sex", row="time", data=tips);
当出现变量过多还可以使用col_wrap参数设置一行显示多少个图,下图就设置的一行显示3个图,
sns.relplot(x="total_bill", y="tip", hue="smoker",
col="day",col_wrap=3, data=tips);
结语
今天分享了作图的第二步,去查看数据间的相互关系,明天将就具体的一些数据类型进行绘图的分享。
谢谢阅读。
参考
Seaborn绘图文档