1. 介绍
- Seaborn基于matplotlib核心库进行了更高级别的API封装,可以轻松的绘制图形,主要体现在配色更加舒服,以及图形元素更加细腻
2. 绘制单变量分布
# 语法格式
seabron.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, color=None)
参数含义:
- a: 表示要观察的数据,可以是Series,一维数组,列表
- bins: 用于控制条形的数量
- hist: 接收布尔类型,表示是否绘制(标注)直方图
- kde: 接收布尔类型,表示是否绘制高斯核密度曲线
- rug: 接收布尔类型,表示是否在支持的轴方向上绘制rugplot
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt# 确定随机数生成器的种子
np.random.seed(0)# 生成随机数组
arr = np.random.randn(100)# 创建一个图形
plt.figure(figsize=(10, 8), dpi=100)# 绘制直方图,添加 KDE 和 rug
sns.histplot(arr, bins=10, kde=True, stat="density", color='skyblue', alpha=0.7)
sns.rugplot(arr, color='green')# 设置标题和标签
plt.title("Histogram with KDE and Rug Plot")
plt.xlabel("Value")
plt.ylabel("Density")# 显示图形
plt.show()
3. 绘制双变量分布
3.1 介绍
两个变量的二元分布可视化。使用joinplot函数,可以创建一个多面板图形,比如散点图、二维直方图、核密度估计等,以显示两个变量之间的双变量关系及每个变量在单坐标轴上的单变量分布
# 语法格式
seaborn.joinplot(x, y, data=None, kind='scatter', stat_func=None, color=None, ratio=5, space=0.2, dropna=True)
参数含义:
- kind: 表示绘制图形的类型
- stat_func: 用于计算有关关系的统计量并标注图
- color: 表示绘图元素的颜色
- size: 用于设置图的大小(正方形)
- ratio: 表示中心图与侧边图的比例,该参数的值越大,则中心图占比越大
- space: 用于设置中心图与侧边图的间隔大小
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt# 创建DataFrame对象
data = pd.DataFrame({'x': np.random.randn(500), 'y': np.random.randn(500)})# 绘制散布图
sns.jointplot(x='x', y='y', data=data)plt.show()
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt# 创建DataFrame对象
data = pd.DataFrame({'x': np.random.randn(500), 'y': np.random.randn(500)})# 绘制二维直方图
sns.jointplot(x='x', y='y', data=data, kind='hex')plt.show()
3.3 绘制成对双变量分布图
4. 用分类数据绘图
4.1 分类
- 分类数据散点图:swarmplot()与stripplot()
- 类数据的分布图:boxplot()与violinplot()
- 分类数据的统计估算图:barplot()与pointplot()
4.2 绘制散点图
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=None)
参数含义:
- x,y,hue: 用于绘制长格式数据的输入
- data: 用于绘制数据集,如果x,y不存在,则它作为宽格式,否则作为长格式
- jitter: 表示抖动程度(仅沿类别轴),当很多数据点重叠时,可以指定抖动数量或者默认为True
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plttry:tips = pd.read_csv('./data1101.csv', encoding='gbk')print(tips.head())sns.stripplot(x=tips['day'], y=tips['tip']+1, data=tips)plt.savefig('stripplot.png', dpi=100)plt.show()
except Exception as e:print(f"An error occurred: {e}")
如果jitter为False,画出图像为
使用swarmplot画图得出更加清晰的点图
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plttry:tips = pd.read_csv('./data1101.csv', encoding='gbk')print(tips.head())sns.swarmplot(x=tips['day'], y=tips['tip'], data=tips)plt.savefig('stripplot.png', dpi=100)plt.show()
except Exception as e:print(f"An error occurred: {e}")
4.3 类别内的数据分布
4.3.1 箱型图
4.3.1.1 介绍
- 用作显示一组数据分散情况资料的统计图
- 显示一组数据的最大值,最小值,中位数,上下四分位数
4.3.1.2 绘制箱型图
# 代码示例
seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)
参数含义:
- palette: 用于设置不同级别的颜色变量 ---- pattle=[‘r’, ‘g’, ‘b’, ‘y’]
- saturation: 用于设置数据显示的颜色饱和度 ---- 使用小数表示
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plttry:tips = pd.read_csv('./data1101.csv', encoding='gbk')print(tips.head())sns.boxplot(x=tips['day'], y=tips['tip'], data=tips)plt.savefig('stripplot.png', dpi=100)plt.show()
except Exception as e:print(f"An error occurred: {e}")
4.3.2 小提琴图
4.3.2.1 介绍
- 显示数据分布及其概率密度
- 显示数据分布形状
- 中间的黑色粗条表示四分位数的范围,从前延伸的幼细黑线代表95%的置信区间,而白点则代表中位数
4.3.2.2 绘制小提琴图
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plttry:tips = pd.read_csv('./data1101.csv', encoding='gbk')print(tips.head())sns.violinplot(x=tips['day'], y=tips['tip'], data=tips)plt.savefig('stripplot.png', dpi=100)plt.show()
except Exception as e:print(f"An error occurred: {e}")
4.4 类别内的统计估计
4.4.1 绘制条形图
若每个类别中有多个类别时,则条形图可以使用引导计算估计的置信区间(是指样本统计量所构造的总体参数的估计区间),并使用误差条件来表示置信区间
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plttry:tips = pd.read_csv('./data1101.csv', encoding='gbk')print(tips.head())sns.barplot(x=tips['day'], y=tips['tip'], data=tips)plt.savefig('stripplot.png', dpi=100)plt.show()
except Exception as e:print(f"An error occurred: {e}")
4.4.2 绘制点图
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plttry:tips = pd.read_csv('./data1101.csv', encoding='gbk')print(tips.head())sns.pointplot(x=tips['day'], y=tips['tip'], data=tips)plt.savefig('stripplot.png', dpi=100)plt.show()
except Exception as e:print(f"An error occurred: {e}")