【参考b站视频:一小时带你掌握seaborn可视化教程
跟着视频学习了一下,并记录下来分享给大家~
我是在 pycharm 环境中运行的,用 jupyter notebook会更方便一点哦~】
需要导入的库函数:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
使用 seaborn 画图时需要调用哪些语句,可以参考下边的这幅图:
(具体怎么用,通过后边的代码就能看出来,不急~~)
数据说明
实验中我们使用seaborn自带的数据集,seaborn主要分析处理的就是dataframe数据类型
print(sns.get_dataset_names()) #查看seaborn有哪些自带的数据集
# 加载第一个测试数据集
penguin_df=sns.load_dataset("penguins") #加载数据报错时,参考 https://zhuanlan.zhihu.com/p/452775423
# print(penguin_df)
# 加载第二个测试数据集
tip_df=sns.load_dataset("tips")
# print(tip_df)
1. 箱型图
箱型图可以用来查看数据的取值范围,检查一下是否存在异常
## 数据集中其实是存在缺失值的,但是下边的画图并没有报错,可见seaborn会自动识别空值
sns.boxplot(data=penguin_df,x="bill_length_mm") # 传入的df数据;在x轴上绘制bill_length_mm列数据的分布情况
#sns.boxplot(data=penguin_df,y="bill_length_mm") #在y轴上绘制
#sns.boxplot(data=penguin_df) #不指定画哪列的话,就是每列数据的箱型都在一张图上了
plt.show() #想在pycharm中让seaborn弹出图,需要加上这句话(后续不再强调,大家别忘了加就行)
###### 画多箱图 ######
#根据sex属性,对total_bill这列数据进行拆分
#属于Male的total_bill拿出来画一个分布,属于Female的total_bill拿出来画一个分布
sns.boxplot(data=tip_df,y="total_bill",x='sex')
# 根据最开始给出的那个框架图,boxplot属于catplot大类,所以我们也可以用catplot来画图
sns.catplot(data=penguin_df,x="bill_length_mm",kind="box") #这里要用kind参数来指定画箱型图
【更多箱型图操作可参考:绘制箱型图】
2. 分布散点图
相当于把箱型图的箱子里的数据给展示出来
sns.stripplot(data=df_select,x='vpair',y='weight')
sns.stripplot(data=df_select,x='vpair',y='weight',jitter=False) # jitter参数可以设置去掉震动效果
3. 小提琴图
sns.violinplot(data=tip_df,x='day',y="total_bill")
4. 直方图
统计某个数值出现的频数/频率
sns.displot(data=penguin_df,x='bill_length_mm') # displot默认是绘制直方图
sns.histplot(data=penguin_df,x='bill_length_mm') #用histplot这个专门画直方图的试一下
sns.displot(data=penguin_df,x='bill_length_mm',bins=50) #调整每个统计区间的大小
sns.displot(data=penguin_df,x="species") #类别变量这列也可以画直方图
###### hue是一个很重要的参数,它可以自动对类别进行解析,加上它画出来的图也很高级
sns.displot(data=penguin_df,x="species",hue="species",shrink=0.7) #shrink来缩小间距
sns.countplot(data=penguin_df,x='species') #根据那个框架图,可以看到countplot是专门针对类别统计的
5. 柱状图
跟直方图不一样,纵轴代表的是数值大小而不是频数,可参考matplotlib中的bar
x = ['A','B','C','D','E','F']
y = [8,3,2,4,9,5]
sns.barplot(x,y,color='steelblue')
plt.xlabel('方法',fontsize=12)
plt.ylabel('准确率',fontsize=12)
plt.show()
【至于怎么画多组方案并列对比的柱状图,用matlab更方便简洁一点】
6. 核密度估计KDE曲线
sns.displot(data=penguin_df,x='bill_length_mm',kde=True) #默认画的直方图,并叠加上kde曲线
sns.displot(data=penguin_df,x='bill_length_mm',kind="kde",hue="species") #kind指定我就是要画kde曲线,用强大的来hue解析类别
sns.displot(data=penguin_df,x='bill_length_mm',kind="kde",hue="species",rug=True) #rug参数可以在下方加上观测数据的小细条
sns.displot(data=penguin_df,x='bill_length_mm',kind="kde",hue="species",cut=0)#kde曲线是拟合的,所以存在超出范围的值,用cut参数即可去除不展示
sns.displot(data=penguin_df,x='bill_length_mm',kind="kde",hue="species",cut=0,linewidth=5,color='r') #还可以设置线宽、颜色
7. 绘制多个子图
利用FaceGrid特性来形成多个子图(根据某两列属性的组合构成多图)
sns.displot(data=penguin_df,x='bill_length_mm',row='sex',col='island',kind='kde')
sns.displot(data=penguin_df,x='bill_length_mm',row='sex',col='island',hue='species',kind='kde') # hue它又来喽~~
8. 散点图
sns.relplot(data=tip_df,x='total_bill',y='tip') #绘制散点图
sns.relplot(data=tip_df,x='total_bill',y='tip',hue='time',style='time',markers=['o','^']) #后边可以加一些参数,区分不同的类别
sns.relplot(data=tip_df,x='total_bill',y='tip',hue='size',size='size') #还可以设置点的大小变化
sns.relplot(data=tip_df,x='total_bill',y='tip',col='day',col_wrap=2) #按“day”列划分多子图,放在一行太挤太丑了,用col_wrap设置一行两个
9. 折线图
折线图展示出变量的变化过程。和kde曲线是不一样的,kde和直方图是看变量的分布,没有时序的概念
### 以下两种方式均可 ###
profitList=[3,2,4,1,-2,7,8,8,8]
sns.lineplot(data=profitList) # 传入一个列表
df=pd.read_csv(r'E:\2022年\example.csv')
sns.lineplot(data=df['w']) # 传入dataframe的某一列
10. 线性关系分析
基于上边画的散点,找到一个线性回归函数进行拟合
sns.lmplot(data=tip_df,x='total_bill',y='tip')
sns.regplot(data=tip_df,x='total_bill',y='tip') #专门画回归的函数
sns.lmplot(data=tip_df,x='total_bill',y='tip',row='smoker',col='time',hue="time") #画子集的多图
持续更新中……