Python轮子:数据可视化~seaborn

原文链接: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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注