原文链接:http://juzicode.com/python-module-seaborn/
Seaborn是基于Matplotlib的Python数据可视化库,提供高级接口和美观的默认样式,简化统计图形创建流程,特别适用于数据分析和探索性研究。
应用场景
- 数据分布探索
- 变量关系分析
- 分类数据可视化
- 统计模型结果展示
- 多维数据集分析
- 时间序列模式发现
安装与导入
pip install seaborn
import seaborn as sns
import matplotlib.pyplot as plt
使用方法
1)直方图可视化
直方图与核密度估计组合图,快速理解数据分布特征。
# juzicode.com/VX公众号:juzicode
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="total_bill", kde=True)
plt.title("消费金额分布")
plt.show()

2)小提琴图
加载tips数据,绘制小提琴图
# juzicode.com/VX公众号: 桔子code
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
tips = sns.load_dataset("tips")
plt.figure(figsize=(10, 6))
sns.violinplot(
x="day", # x轴:星期几
y="total_bill", # y轴:总消费金额
hue="sex", # 按性别拆分
data=tips, # 数据源
split=True, # 左右对称显示性别分布
palette="pastel", # 使用柔和配色
inner="quartile" # 显示四分位线
)
# 添加标题和标签
plt.title('不同性别每日消费金额分布', fontsize=14)
plt.xlabel('星期', fontsize=12)
plt.ylabel('总金额(美元)', fontsize=12)
plt.xticks(rotation=30) # 旋转x轴标签
# 调整图例位置
plt.legend(title='性别', loc='upper right')
plt.tight_layout()
plt.show()

3)分类数据可视化
箱线图与散点图结合,展示分类变量分布差异。
# juzicode.com/VX公众号:juzicode
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="total_bill", data=tips)
sns.stripplot(x="day", y="total_bill", data=tips, color=".3")
plt.title("每日消费分布")
plt.show()

4)变量关系分析
散点图矩阵展示多维变量相关性。
# juzicode.com/VX公众号:juzicode
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
iris = sns.load_dataset("iris")
sns.pairplot(iris, hue="species")
plt.show()

5)热力图绘制
可视化矩阵数据,特别适合展示相关系数矩阵。
# juzicode.com/VX公众号:juzicode
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
tips = sns.load_dataset("tips")
# 仅选择数值列计算相关系数
numeric_tips = tips.select_dtypes(include=['number'])
corr = numeric_tips.corr()
sns.heatmap(corr, annot=True, cmap="coolwarm", fmt=".2f")
plt.title("特征相关性")
plt.show()

6)时间序列可视化
折线图结合置信区间,展示趋势变化。
# juzicode.com/VX公众号:juzicode
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
# 加载航班数据集并转换为宽表格格式
flights = sns.load_dataset("flights")
flights = flights.pivot(index="month", columns="year", values="passengers")
# 绘制折线图
sns.lineplot(data=flights, dashes=False)
plt.xticks(rotation=45)
plt.title("航班乘客量变化")
plt.show()

7)多图面板系统
FacetGrid实现多维数据分面展示。
# juzicode.com/VX公众号:juzicode
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="smoker")
g.map(sns.scatterplot, "total_bill", "tip")
plt.show()

进阶技巧
- 调色板定制:使用sns.color_palette()创建自定义配色方案
- 图形组合:sns.JointGrid组合边际分布与主图
- 回归分析:sns.regplot可视化线性趋势
- 分类聚合:sns.catplot展示分类变量统计量
总结
Seaborn核心优势:
- 简洁优雅的默认样式
- 丰富的统计可视化方法
- 多维数据展示能力
- 自动计算统计估计值
注意事项:
- 分类数据排序需预先处理
- 3D可视化需结合Matplotlib