Skip to content

Seaborn 可视化

Seaborn 是基于 Matplotlib 的高级数据可视化库,提供更美观的图表和更便捷的 API。

基本绘图

散点图

python
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 创建数据
data = pd.DataFrame({
    'x': [1, 2, 3, 4, 5],
    'y': [2, 4, 5, 4, 5]
})

# 创建散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=data, x='x', y='y', hue='x', size='y')
plt.title('散点图')
plt.show()

折线图

python
# 创建数据
data = pd.DataFrame({
    'x': [1, 2, 3, 4, 5],
    'y1': [1, 2, 3, 4, 5],
    'y2': [1, 4, 9, 16, 25]
})

# 创建折线图
plt.figure(figsize=(10, 6))
sns.lineplot(data=data, x='x', y='y1', label='线性')
sns.lineplot(data=data, x='x', y='y2', label='二次')
plt.title('折线图')
plt.legend()
plt.show()

柱状图

python
# 创建数据
data = pd.DataFrame({
    'category': ['A', 'B', 'C', 'D'],
    'value': [30, 45, 25, 60]
})

# 创建柱状图
plt.figure(figsize=(10, 6))
sns.barplot(data=data, x='category', y='value', palette='viridis')
plt.title('柱状图')
plt.show()

直方图

python
# 创建数据
data = pd.DataFrame({
    'value': np.random.randn(1000)
})

# 创建直方图
plt.figure(figsize=(10, 6))
sns.histplot(data=data, x='value', kde=True, bins=30)
plt.title('直方图')
plt.show()

高级绘图

箱线图

python
# 创建数据
data = pd.DataFrame({
    'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'value': [10, 20, 30, 20, 30, 40, 30, 40, 50]
})

# 创建箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(data=data, x='group', y='value')
plt.title('箱线图')
plt.show()

小提琴图

python
# 创建小提琴图
plt.figure(figsize=(10, 6))
sns.violinplot(data=data, x='group', y='value')
plt.title('小提琴图')
plt.show()

热力图

python
# 创建相关矩阵
data = pd.DataFrame({
    'x': [1, 2, 3, 4, 5],
    'y': [2, 4, 5, 4, 5],
    'z': [3, 6, 7, 6, 7]
})
corr_matrix = data.corr()

# 创建热力图
plt.figure(figsize=(10, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('热力图')
plt.show()

配对图

python
# 创建配对图
sns.pairplot(data)
plt.suptitle('配对图', y=1.02)
plt.show()

样式设置

使用主题

python
# 使用预定义主题
sns.set_theme(style='whitegrid', palette='viridis')

# 查看可用主题
print(sns.axes_style())

自定义样式

python
# 设置样式参数
sns.set(
    rc={
        'figure.figsize': (10, 6),
        'axes.titlesize': 16,
        'axes.labelsize': 14,
        'xtick.labelsize': 12,
        'ytick.labelsize': 12
    }
)

# 绘图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=data, x='x', y='y')
plt.title('自定义样式')
plt.show()

注意事项

  1. 数据格式: Seaborn 通常需要 DataFrame 格式的数据
  2. 颜色调色板: 选择合适的颜色调色板可以提升图表可读性
  3. 图表类型选择: 根据数据类型和分析目的选择合适的图表类型
  4. 样式一致性: 在同一报告或分析中保持样式一致