# seaborn
- seaborn是基于matplotlib的一个可视化的库 是在matplotlib的基础上进行的更加高级的封装 是作图变得更加容易
- 不需要了解大量底层参数就能使得图形变得更加精致 兼容numpy和pandas的数据结构
进而在很大程度上完成数据可视化
- 使用seaborn的三种方式
- plt.style('seaborn')
- sns.set
- 调用seaborn的函数
- 但对于简单的制图,使用前两种都可以,但对于复杂图形,可能会使用第三种方式(用pandas调用数据)
seaborn的基本语法
首先简单画个图
x = np.linspace(0,100,1000)#创建等差数列 初始为0 终止为100 共有1000个元素
y = np.sin(x)
plt.plot(x,y,c='red',lw=2,ls='-')
plt.show()
plt.style.use('seaborn')#第一种调用方式
x = np.linspace(0,100,1000)#创建等差数列 初始为0 终止为100 共有1000个元素
y = np.sin(x)
plt.plot(x,y,c='red',lw=2,ls='-')
plt.show()
sns.set(style='darkgrid',context='notebook',font_scale=1.2)#;style是主题样式,总共有五种选项 darkgrid whitegrid 等
#context指元素缩放尺寸 一般用默认notebook font_scale是控制坐标轴刻度大小
x = np.linspace(0,100,1000)#创建等差数列 初始为0 终止为100 共有1000个元素
y = np.sin(x)
plt.plot(x,y,c='red',lw=2,ls='-')
plt.show()
- 第三种
sns.barplot(x=’横坐标名称‘,y=‘纵坐标名称’,data=要调用的数据,color=‘’,orient=‘vertical’‘h’#柱状图朝向)
- 垂直图和水平图的横纵坐标参数要调换
# 绘制常用图形如下
sns.barplot(x,y)柱状图
sns.scatter(x,y)散点图
sns.boxplot:箱线图
sns.distplot:直方图
- 柱状图
语法如下:
sns.barplot(x=横坐标对应的数据名,y=纵坐标对应的数据名,hue=‘’,data=,color=‘’,palette=‘’,orient=)-
- hue:分类变量
- palette:调色板
- 调色板参数:muted,RdBu,Set1,Blues.d,husl等
- 散点图
语法如下:
sns.scatterplot(x,y,hue,data,palette,style,s,markers)
- style:以分类变量作图,产生不同的形状
- s:形状大小
- markers:形状
iris = pd.read_csv('iris.csv')
sns.scatterplot(x = 'Petal_Width',y = 'Petal_Length',data = iris,color = 'red',marker = '+', s = 20)
plt.xlabel('花瓣宽度')
plt.ylabel('花瓣长度')
plt.show()
#基于分类变量的散点图
iris = pd.read_csv('iris.csv')
sns.scatterplot(x = 'Petal_Width',y = 'Petal_Length',data = iris,color = 'red',s = 20,hue = 'Species',
style = 'Species')
plt.xlabel('花瓣宽度')
plt.ylabel('花瓣长度')
plt.show()
- 箱线图
sns.boxplot(x,y,hue,data,color,width,order,fliesize,linewidth,color)
- flierprops:异常值情况
- meanprops:均值情况
- medianprops:中值情况
- fliersize:异常值点的大小
- linewidth:指定箱体边框的宽度
- meanprops:均值属性
Titanic = pd.read_csv('titanic_train.csv')
Titanic.dropna(subset=['Age'].inplace = True)#导入数据
sns.boxplot(y = 'Age', data = Titanic,
showmeans = True,color = 'steelblue',width = 0.3,
flierprops={'marker':'o','markerfacecolor':'indianred','markersize':3},
meanprops = {'marker':'D','markersize':4},
medianprops = {'linestyle':'--','color':'orange'})
#基于分租变量的箱线图情况
sec_building = pd.read_excel('sec_buildings.xlsx')#导入数据
group_region = sec_building.groupby('redion')#创建一个分组对象
avg_price = group_region.agg({'price_unit':np.mean}).source_values('price_unit',ascending = False #计算均值 绘制不同地区二手房情况并按照降序排序
avg_price
plt.figure(figuresize=(12,8))#改变画布大小
sns.boxplot(x ='region',y = 'price_unit', data = sec_building,order = avg_price.index,
showmeans = True,color = 'steelblue',width = 0.3,
flierprops={'marker':'o','markerfacecolor':'indianred','markersize':3},
meanprops = {'marker':'D','markersize':4},
medianprops = {'linestyle':'--','color':'orange'})#order是顺序,按照分类变量绘制箱线图时必须要有一个顺序
plt.ylabel('单价(元)')
plt.title('不同地区二手房价对比')
plt.xticks(rotation = 45,frontsize = 16)#横坐标旋转45度,变成16号字体
plt.show()
- 直方图
sns.distplot(a,bins,hist,kde,color,rug,ax,fit,kws,kde_kws,fit_kws,vertical, norm_hist)
- a:数据
- kde:是否绘制核密度图
- hist:是否显示柱子
- hist_kws:传递直方图相关参数
- kde_kws:传递核密度图相关参数
- fit_kws:传递概率密度曲线相关参数
- bins:柱子的数目
- rug:x轴是否显示小细条
- ax:指定子图位置
- fit:是否绘制概率密度曲线图
- vertical:是否水平画图
- norm_hist:频数是否计算成概率
- color:曲线颜色
Titanic = pd.read_csv('titanic_train.csv')
Titanic.dropna(subset = ['Age'],inplace = True) #除去缺失值
Age_Male = Titanic[Titanic.Sex =='male']['Age']
Age_Female = Titanic[Titanic.Sex =='female']['Age']
#绘制男女乘客年龄直方图及相关正太分布图
from scipy.stats import norm
sns.distplot(Age_Male,bins = 30,kde = False,hist_kws{'color':'steelblue'}
norm_hist = True,lael = '男性')
sns.distplot(Age_Male,hist = False,kde = False,fit = norm,hist_kws{'color':'yellow'}
norm_hist = True,lael = '男性正太分布图')
sns.distplot(Age_Male,bins = 30,kde = False,hist_kws{'color':'steelblue'}
norm_hist = True,lael = '男性')
sns.distplot(Age_Male,hist = False,kde = False,fit = norm,fit_kws{'color':'yellow'}
norm_hist = True,lael = '男性正太分布图')
sns.distplot(Age_Feale,bins = 30,kde = False,hist_kws{'color':'red'}
norm_hist = True,lael = '女性')
sns.distplot(Age_Feale,hist = False,kde = False,fit = norm,fit_kws{'color':'o'}
norm_hist = True,lael = '女性正分布图')
plt.legend(loc = 'best')
plt.show()