每天一个库,今天学习seaborn
前言
大家好呀!昨天我们已经学习了matplotlib,相信大家对可视化作图已经有了一定的了解,今天我们来学习seaborn,话不多说,让我们速速开学!٩( ‘ω’ )و
seaborn简介
Seaborn 是基于 Python 的 matplotlib 库的一个数据可视化库,它提供了更高级、更美观、更简洁的接口,用于绘制统计图形,帮助用户更好地理解数据的分布、关系和趋势。当然了,虽然 Seaborn 提供了强大的绘图功能,但它仍然是基于 matplotlib 的。因此在使用 Seaborn 绘制图形后,仍然可以使用 matplotlib 的函数对图形进行进一步的定制和调整,例如添加标题、修改坐标轴标签、设置图形大小等。
这个是seaborn的官方文档,感兴趣的童鞋可以看一下
导入库
没有下载过seaborn的童鞋先下载一下
pip install seaborn
import seaborn as sns #导入库
柱状图Bar
import seaborn as sns
plt.figure(figsize=[10,6])
sns.barplot(data=s_count1,x='season',y='count',hue='year',palette='Set1') #palette='Set1'色调配色
plt.xticks(ticks=range(4),labels=['spring','summer','fall','winter']) #自定义 x 轴刻度的位置和标签
plt.tight_layout() #自动调整子图之间的间距,以确保图形的布局更加美观
plt.show()
主题设置
可以使用seaborn.set_theme(style=None,palette=None)对主题进行修改,也可以使用seaborn.set_style()和seaborn.set_palette单独修改style和palette
sns.set_theme() #默认主题
sns.set_theme(style="whitegrid", palette="pastel") # 使用whitegrid风格和pastel调色板主题绘制柱状图
sns.set_theme(style="white", palette="Set3") # 使用white风格和Set3调色板主题绘制柱状图
# 单独设置style和palette
#sns.set_style(style=None,rc=None)
#常用style:darkgrid/whitegrid/dark/white/ticks
#sns.set_palette(palette,n_colors=None,desat=None,color_codes=False)
#常用palette=sns.color_palette()
箱线图Boxplot
基础箱线图
## 基础箱线图
sns.boxplot(data=data,x='season',y='temp',palette='Set1')
plt.tight_layout()
plt.show()
多维度箱线图
plt.figure(figsize=[10,6])
sns.boxplot(data=data,x='season',y='temp',hue='year',palette='Set3')#区别颜色的属性hue
plt.xticks(ticks=range(4),labels=['spring','summer','fall','winter'])
plt.tight_layout()
plt.show()
散点图Plot
基础散点图scatterplot
sns.scatterplot(data=data_2011, x="temp", y="windspeed")
plt.show()
关系散点图replot
颜色的深度表示数量大小
sns.relplot(data=data_2011,
x = "temp",
y = "windspeed",
hue = 'count',
size = 'count', #决定散点大小的属性
palette = 'mako_r', #_r表示翻转,通常在映射数值使用,浅色象征数值小,深色象征数值大
sizes = (10,200), #散点尺寸范围
height = 5, #图大小
aspect = 1.5, #图大小
alpha = 0.4) #散点透明度
plt.show()
核密度估计图/等高线图 kdeplot()
# 核密度估计图kdeplot
fig,axes = plt.subplots(1,2,figsize=(12,6))
sns.kdeplot(data=data_2011,
x = 'temp',
y = 'windspeed',
cmap = 'Greens', #色谱
ax = axes[0], #当前坐标系是第一个
fill = True) #是否填充颜色shade
plt.subplots_adjust(wspace=0.2) #调整子图间的宽间距、高间距
#等高线图
sns.kdeplot(data=data_2011,
x = 'temp',
y = 'humidity',
ax = axes[1], #当前坐标系是第二个
cmap='Blues')
plt.show()
热力图heatmap
关系矩阵热力图
#关系矩阵热力图
corr = data_2011.corr() #计算全部属性两两之间的皮尔森相关系数
plt.figure(figsize=[11,9])
sns.heatmap(corr,cmap='YlGnBu')
plt.xticks(rotation=30)
plt.show()
上三角关系矩阵热力图
corr_tri = np.triu(corr,k=0) #np.triu()得到原矩阵的上三角矩阵
#上三角作为热力图的mask,得到更简洁的关系矩阵热力图
plt.figure(figsize=(7,6))
sns.heatmap(corr,mask=corr_tri,cmap='YlGnBu')
plt.xticks(rotation=30)
plt.show()
组合图表jointplot
组合类型一
#kind: { “scatter” | “kde” | “hist” | “hex” | “reg” | “resid” }
sns.jointplot(data=data,
x='temp',
y='windspeed',
kind='scatter') #scatter散点+直方
plt.show()
sns.jointplot(data=data,
x='temp',
y='windspeed',
kind='kde') #kde 核密度估计(双变量)+核密度估计(单变量)
plt.show()
sns.jointplot(data=data,
x='temp',
y='windspeed',
kind='hex') #hex 蜂巢图+直方
plt.show()
组合类型二
plt.rcParams['font.sans-serif'] = 'SimHei' #解决中文显示问题
sns.barplot(x=s_count.index,
y='2011年',
data=s_count,
color='#cccccc',
label='2011')
sns.lineplot(x=s_count.index,
y='2012年',
data=s_count,
color='red',
label='2012')
plt.title('2011&2012年用户量组合图')
plt.legend()
plt.show()
可以明显看到,这样的组合图表会出现错位问题,给出以下两种解决方法。
- 解决方法一:用plt画
#会存在错位问题,解决方法1:用plt画
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.bar(s_count.index,
s_count['2011年'],
color='#cccccc',
label='2011')
plt.plot(s_count.index,
s_count['2012年'],
color='red',
label='2012')
plt.title('2011&2012年用户量组合图')
plt.legend()
plt.show()
3.解决方法二:让折线图也从0个位置画起
#会存在错位问题,解决方法2:让折线图也从0个位置画起
sns.barplot(x=[0,1,2,3],
y='2011年',
data=s_count,
color='#cccccc',
label='2011')
sns.lineplot(x=[0,1,2,3],
y='2012年',
data=s_count,
color='red',
label='2012')
plt.title('2011&2012年用户量组合图')
plt.legend()
plt.show()
同时,当组合图中两种类型的图数据差异较大时,就需要使用多个坐标轴,下面介绍使用两个y轴的方法
#两年分两个y轴
#创建多个坐标系对象,用对象.twinx()共享x轴,txiny共享y轴
fig,axl = plt.subplots(figsize=(10,6))
ax1 = sns.barplot(x=[0,1,2,3],
y='2011年',
data=s_count,
color='#cccccc',
label='2011')
ax2 = ax1.twinx()
ax2 = sns.lineplot(x=[0,1,2,3],
y='2012年',
data=s_count,
color='red',
label='2012')
ax1.legend(loc=2)
ax2.legend(loc=1)
plt.title('2011&2012年用户量组合图')
plt.legend()
plt.show()
雷达图
fig = plt.figure()
ax=plt.subplot(111,polar=True) #创建画布和坐标系
ax.plot(angles,value2011,'o-',linewidth=2)#ax.plot表示在极坐标子图上绘制折线图,angles表示每个数据点对应的角度,用于确定数据点在极坐标中的位置。
ax.fill(angles,value2011,alpha=0.25) #透明度为 0.25
ax.set_thetagrids(angles*180/np.pi,feature) #设置极坐标图的角度刻度标签
ax.set_ylim(0.5) #设置极坐标图径向轴(即从原点向外的轴)的范围
ax.grid(True) #显示网格线
plt.title('2011&2012整体情况比较')
plt.show()
创作不易,亲亲求点赞求收藏呀ヾ(=・ω・=)o