Seaborn的底层是基于Matplotlib的,他们的差异有点像在点餐时选套餐还是自己点的区别,Matplotlib是独立点菜,可能费时费心(尤其是对我这种选择困难症患者…)但最后上桌的菜全是特别适合自己的;而Seaborn是点套餐,特别简单,一切都是配好的,虽然省时省心,但可能套餐里总有些菜是不那么合自己口味的。接下来详细说一下:
Seaborn是用户把自己常用到的可视化绘图过程进行了函数封装,形成的一个“快捷方式”,他相比Matplotlib的好处是代码更简洁,可以用一行代码实现一个清晰好看的可视化输出。主要的缺点则是定制化能力会比较差,只能实现固化的一些可视化模板类型;
而Matplotlib是可以实现高度定制化绘图的,高度定制化可以让你获得最符合心意的可视化输出结果,但也因此需要设置更多的参数,因而代码更加复杂一些。
两者相互补充,Seaborn,一般来说基本是够用的,而且特别容易上手;但很多时候Seaborn输出的结果确实可能不如人意,这时候需要结合Matplotlib做些修改,就需要深入学习下Matplotlib。
此处仅仅是快速回顾Matplotlib的相关概念,之前忘记的小伙伴可以查看数据分析可视化课程的第三章matplotlib相关内容
import pandas as pdimport matplotlib.pyplot as pltimport random# maplotlib快速回顾# 列表推导式plt.rcParams['font.sans-serif'] = ['SimHei']x_val = [str(i) + '月' for i in range(1,12)]y_val = [random.randint(1,10) for i in range(1,12)]# 显示分类图则 color与label显得有意义plt.scatter(x_val,y_val,color='red',label='我是标签')plt.legend(title='分类标题')plt.xlabel('月份')plt.ylabel('销量')plt.title('Matplotlib快速回顾')plt.show()
from sklearn.datasets import load_iris# 可以通过网络获取数据集,控制台有csv的存储地址data = load_iris()print(data)iris = pd.read_csv("../data/iris.csv")print(iris.head())print(iris['Type'].unique())colors = dict(zip(iris['Type'].unique(),['blue','green','red']))for index,group in iris.groupby('Type'): # print(group) plt.scatter(group['PetalLength'],group['SepalLength'],color=colors[index],label=index) plt.legend(title='type') plt.xlabel('petalLength') plt.ylabel('sepalLength')plt.show()
Matplotlib效果图如下
import seaborn as snssns.lmplot('PetalLength','SepalLength',iris,hue='Type',fit_reg=False)plt.show()
SeaBorn效果图如下
# Series天生与可视化无缝转化s1= pd.Series(data=np.random.normal(loc=5,scale=1,size=100))# sns.kdeplot(s1,color='#ff0000')sns.kdeplot(s1,color='#ff0000',shade=True, vertical=True)s2= pd.Series(data=np.random.normal(loc=5,scale=4,size=100))# cmap: 颜色方案,直接配置#FF000会抛出异常,在控制台会打印正确的值sns.kdeplot(s1,s2,cmap='BrBG',shade=True)# 0,7,1版本支持: sns.plt.show()plt.show()
双核密度估计图
# 封装了直方图和核密度估计图: rug: 控制是否画样本点sns.distplot(a=s1,hist=False,kde=True,rug=True,kde_kws={'shade':True},label='AAA')sns.distplot(a=s2,hist=False,kde=True,rug=True,kde_kws={'shade':True},label='BBB')plt.show()
密度估计图(多图)
# 查看源码发现下载地址是github:https://github.com/mwaskom/seaborn-datadf = sns.load_dataset("flights")print(df.info())print(df.head(n=3))# 如果数据量大可以尝试保存在本地df.to_csv('../data/flights.csv')# 采用透视表对数据结构进行重新组装df = df.pivot(index='month',columns='year',values='passengers')print(df)
sns.heatmap(df,annot=True,fmt='d',cmap='YlGnBu')plt.show()#可以通过柱状图显示每年的乘客数量s = df.sum()print(s,type(s))sns.barplot(x=s.index,y=s.values)plt.show()
热力图显示每年每月的旅客人数
sns.set_style("darkgrid",{'grid.color':'#00ff00'})# 返回样式的属性值for item in sns.axes_style().items(): print(item)# numpy 模拟等差数列x = np.linspace(0,10,100)y1 = np.sin(x)y2 = np.sin(x + 2) * 1.5sns.lineplot(x,y1)sns.lineplot(x,y2)plt.show()
修改样式之后的效果如下
tips = sns.load_dataset("tips")tips.to_csv("../data/tips.csv")print(tips.head())# 分布散点图 默认会对x列进行分组操作 jitter: 是否支持抖动效果# sns.stripplot(x='day',y='total_bill',data=tips,jitter=True)# 分类散点图 hue: 要分类的列,建议列值不能太多sns.swarmplot(x='day',y='total_bill',data=tips,hue='sex')plt.show()
分类散点图效果
联系客服