Python 数据可视化:用 Matplotlib 绘制多维度对比图表
Python 数据可视化:多维度对比图表实现指南
在数据分析中,多维度对比图表能直观展示多个变量间的关系。以下使用 Matplotlib 实现三种常用多维图表:
1. 平行坐标图 (Parallel Coordinates)
适用于比较多个连续变量的模式差异:
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates
import pandas as pd
from sklearn import datasets# 加载鸢尾花数据集
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = [iris.target_names[i] for i in iris.target]# 创建平行坐标图
plt.figure(figsize=(10, 6))
parallel_coordinates(df, 'species', colormap='viridis')
plt.title('鸢尾花特征平行坐标图')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
2. 雷达图 (Radar Chart)
适用于比较多个分类变量的相对强度:
import numpy as np# 示例数据:三种产品在五个维度的评分
categories = ['设计', '性能', '续航', '安全性', '价格']
product_A = [4.2, 4.5, 3.8, 4.0, 3.5]
product_B = [3.8, 4.0, 4.2, 4.5, 4.0]
product_C = [4.5, 3.5, 4.0, 3.8, 4.2]# 角度计算
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
angles += angles[:1] # 闭合图形# 创建雷达图
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, polar=True)# 绘制数据
def plot_radar(data, color, label):data += data[:1]ax.plot(angles, data, color=color, linewidth=2, label=label)ax.fill(angles, data, color=color, alpha=0.25)plot_radar(product_A, 'blue', '产品A')
plot_radar(product_B, 'green', '产品B')
plot_radar(product_C, 'red', '产品C')# 设置标签
ax.set_theta_offset(np.pi / 2)
ax.set_theta_direction(-1)
ax.set_thetagrids(np.degrees(angles[:-1]), categories)
ax.set_title('产品特性对比雷达图', pad=20)
ax.legend(loc='upper right')
plt.show()
3. 散点图矩阵 (Scatter Matrix)
适用于探索多个变量间的相关性:
from pandas.plotting import scatter_matrix# 创建散点图矩阵
plt.figure(figsize=(12, 10))
scatter_matrix(df.iloc[:, :4], diagonal='kde', # 对角线显示核密度估计color=df['species'].map({'setosa':'blue', 'versicolor':'green', 'virginica':'red'}),alpha=0.8,marker='o',s=40)
plt.suptitle('鸢尾花特征散点图矩阵', y=0.95)
plt.tight_layout()
plt.show()
关键技巧:
- 数据标准化:使用
StandardScaler确保不同量纲的变量可比from sklearn.preprocessing import StandardScaler scaled_data = StandardScaler().fit_transform(df.iloc[:, :4]) - 颜色编码:使用
c参数表示第四维度plt.scatter(x, y, c=z, cmap='viridis') - 交互式探索:结合
mplcursors实现悬停提示import mplcursors mplcursors.cursor(hover=True)
三种图表适用场景:
- 平行坐标图:分析>5个连续变量的模式差异
- 雷达图:比较≤8个维度的分类数据
- 散点图矩阵:探索变量间的相关性和分布
通过组合这些技术,可创建强大的多维数据探索工具,帮助发现数据中的隐藏模式和异常值。
