本文内容来源:https://www.dataquest.io/mission/133/creating-compelling-visualizationshtml
本文数据来源:http://www.cdc.gov/nchs/nsfg.htmapi
本文摘要:介绍一个以matplotlib为底层,更容易定制化做图的库Seabornfrontend
Seaborn实际上是在matplotlib的基础上进行了更高级的API封装,从而使得做图更加容易,在大多数状况下使用seaborn就能作出很具备吸引力的图,而使用matplotlib就能制做具备更多特点的图。应该把Seaborn视为matplotlib的补充,而不是替代物。函数
安装seaborn的方法spa
pip install seaborn
原始数据展示(这是一份家庭调查的数据,preglngth - 怀孕周长, birthord - 孕妇的第几个孩子, birthwgt_lb1 - 婴儿重量(单位:磅), birthwgt_oz1 - 婴儿重量(单位:盅司), agepreg - 孕妇在分娩时的年龄)设计
import pandas as pd births = pd.read_csv('births.csv')
在上一篇文章中已经使用过pandas.DataFrame.hist()来制做直方图了,如今用seaborn.distplot()来制做直方图,观察之间的差别3d
# 对上表的prglngth列作一个直方图 import matplotlib.pyplot as plt import seaborn as sns #要注意的是一旦导入了seaborn,matplotlib的默认做图风格就会被覆盖成seaborn的格式 %matplotlib inline # 为了在jupyter notebook里做图,须要用到这个命令 sns.distplot(births['prglngth']) sns.plt.show()
能够看到与使用matplotlib做的直方图最大的区别在于有一条密度曲线(KDE),能够经过设置参数去掉这条默认的曲线code
sns.distplot(births['prglngth'], kde=False) sns.plt.show()
那么Pandas与Seaborn之间有什么区别呢?htm
其实二者都是使用了matplotlib来做图,可是有很是不一样的设计差别blog
# 对上图进行更多的配置 sns.set_style('dark') # 该图使用黑色为背景色 sns.distplot(births['prglngth'], kde=False) # 不显示密度曲线 sns.axlabel('Birth number', 'Frequency') # 设置X轴和Y轴的坐标含义 sns.plt.show()
# 以birthord做为x轴,agepreg做为y轴,作一个箱型图 sns.boxplot(x='birthord', y='agepreg', data=births) sns.plt.show()
seaborn能够一次性两两组合多个变量作出多个对比图,有n个变量,就会作出一个n × n个格子的图,譬若有2个变量,就会产生4个格子,每一个格子就是两个变量之间的对比图
相同的两个变量之间(var1 vs var1 和 var2 vs var2)以直方图展现,不一样的变量则以散点图展现(var1 vs var2 和var2 vs var1)
要注意的是数据中不能有NaN(缺失的数据),不然会报错
sns.pairplot(births, vars=['agepreg', 'prglngth','birthord']) sns.plt.show()