pandas Seaborn绘图

Seaborn可视化

学习目标

  • 掌握seaborn的可视化绘图方法

1 Seaborn简介

  • Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。
  • Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。
  • Seaborn和Pandas的API配合的很好,使用DataFrame/Series的数据就可以绘图
import pandas as pd
import matplotlib.pyplot as plt
# %matplotlib inline
import seaborn as sns
#加载数据 index_col 指定索引列, parse_dates=True 解析日期数据为datetime类型
fifa_data = pd.read_csv('data/fifa.csv', index_col='Date', parse_dates=True)
fifa_data.head()

显示结果

DateARGBRAESPFRAGERITA
1993-08-085.08.013.012.01.02.0
1993-09-2312.01.014.07.05.02.0
1993-10-229.01.07.014.04.03.0
1993-11-199.04.07.015.03.01.0
1993-12-238.03.05.015.01.02.0
  • pandas绘图
fifa_data.plot.line(figsize=(16,8))
  • seaborn 绘图
import seaborn as sns
plt.figure(figsize=(16,6))
sns.lineplot(data=fifa_data)

2 Seaborn绘制单变量图

2.1 直方图

  • 使用sns.distplot创建直方图,如下所示:
import seaborn as sns
#加载seaborn的自带数据
tips = sns.load_dataset('tips', data_home='data/seaborn-data')
#使用subplots函数创建画布,并在其中添加子图
hist,ax = plt.subplots()
# 使用seaborn的displot函数绘图
ax = sns.distplot(tips['total_bill'])
ax.set_title('Total Bill Histogram with Density Plot')
  • seaborn.displot 默认会同时绘制直方图和密度图(核密度估计 kde)。如果只想绘制直方图,可以把kde参数设置为False

    核密度估计,就是采用平滑的峰值函数(“核”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。

hist,ax=plt.subplots()
# 使用seaborn的displot函数绘图
ax = sns.distplot(tips['total_bill'], kde=False)
ax.set_title('Total Bill Histogram')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Frequency')

2.2 密度图(核密度估计)

  • 密度图是展示单变量分布的另一种方法,本质上是通过绘制每个数据点为中心的正态分布,然后消除重叠的图,使曲线下的面积为1来
hist,ax=plt.subplots()
# 使用seaborn的displot函数绘图
ax = sns.distplot(tips['total_bill'], hist=False)
ax.set_title('Total Bill Histogram')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Frequency')
  • 如果只绘制密度图,还可以使用sns.kdeplot函数
hist,ax = plt.subplots()
ax = sns.kdeplot(tips['total_bill'])
ax.set_title('Total Bill Histogram')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Frequency')

2.3 频数图

  • 频数图是变量分布的一维表示,常与其他图一起使用,以增强可视化效果。
  • 下图展示的是带密度图和频数图的直方图
hist,ax = plt.subplots()
# 使用seaborn的displot函数绘图
ax = sns.distplot(tips['total_bill'], rug=True)
ax.set_title('Total Bill Histogram with Density and Rug Plot')
ax.set_xlabel('Total Bill')

2.4 计数图(条形图)

  • 计数图和直方图很像,直方图通过对数据分组来描述分布,计数图(条形图)是对离散变量(分类变量)计数。
count,ax = plt.subplots()
ax = sns.countplot('day', data=tips)
ax.set_title('Count of days')
ax.set_xlabel('Day of the Week')
ax.set_ylabel('Frequency')

3 Seaborn 双变量数据可视化

3.1 散点图

  • 在seaborn中,创建散点图的方法有很多,但是并没有名为scatter的函数。
  • 创建散点图可以使用regplot函数。regplot不仅可以绘制散点图,还会拟合回归线,把fit_reg设置为False,将只显示散点图
figure, ax = plt.subplots()
ax = sns.regplot(x='total_bill', y='tip', data=tips)
ax.set_title('Scatterplot of Total Bill and Tip')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')
  • lmplot函数和regplot函数类似,也可以用于创建散点图。lmplot函数内部会调用regplot,两者的主要区别是regplot创建坐标轴,而lmplot创建图
fig = sns.lmplot(x='total_bill', y='tip', data=tips)
  • 还可以使用jointplot在每个轴上创建包含单个变量直方图的散点图。
joint = sns.jointplot(x='total_bill', y='tip', data=tips)
joint.set_axis_labels(xlabel='Total Bill', ylabel='Tip')
# 添加标题,设置字号;y=1.03表示移动轴域上方的文字
joint.fig.suptitle('Joint Plot of Total Bill and Tip', fontsize=10, y=1.03)

3.2 蜂巢图

  • 使用Seaborn的jointplot绘制蜂巢图,和使用matplotlib的hexbin函数进行绘制的效果类似
joint = sns.jointplot(x='total_bill', y='tip', data=tips, kind='hex')
joint.set_axis_labels(xlabel='Total Bill', ylabel='Tip')
joint.fig.suptitle('Hexbin Joint Plot of Total Bill and Tip', fontsize=10, y=1.03)

3.3 2D密度图

  • 2D核密度图和distplot类似,但2D核密度图可展示两个变量
kde,ax = plt.subplots()
ax = sns.kdeplot(data=tips['total_bill'], data2=tips['tip'], shade=True) #是否填充轮廓
ax.set_title('Kernel Density Plot of Total Bill and Tip')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')
  • 如果参数shade为False,默认为False
kde,ax = plt.subplots()
ax = sns.kdeplot(data=tips['total_bill'],data2=tips['tip'],shade=False) #是否填充轮廓
ax.set_title('Kernel Density Plot of Total Bill and Tip')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')
  • 在轴上添加添加kde
kde_joint = sns.jointplot(x ='total_bill', y='tip', data=tips, shade=True, kind='kde')

3.4 条形图

  • 条形图也可以用于展现多个变量,barplot默认会计算平均值
import numpy as np
bar,ax = plt.subplots()
ax = sns.barplot(x='time', y='total_bill', data=tips) 
ax.set_title('Bar plot of average total bill for time of day')
ax.set_xlabel('Time of day')
ax.set_ylabel('Average total bill')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值