数据可视化是将数据转化为图形表示的过程,以便更好地理解数据中的模式、趋势、异常值和关系。在数据科学和分析领域,拥有一个强大的可视化工具箱至关重要。Python 提供了几个顶级的库来满足这一需求,其中 Matplotlib、Seaborn 和 Plotly 各具特色,在实战中各有千秋。
本文将深入探讨这三个库的实战应用,帮助您选择合适的工具来创建各种类型的数据图表。
一、 Matplotlib - 数据可视化的基石
Matplotlib 是 Python 中最基础、最广泛使用的数据可视化库。它提供了创建各种静态、动态、交互式图表的强大功能,是许多其他可视化库(包括 Seaborn)的基础。
1.1 Matplotlib 的核心概念
Figure (画板): 整个图形的顶层容器,可以包含多个 Axes。
Axes (坐标轴): 图表中实际绘制数据的区域,可以看作是一个图。一个 Figure 可以包含一个或多个 Axes。
Artist (艺术家): Matplotlib 图表中的所有元素,如线条、文本、标签、标题等,都是 Artist 对象。
1.2 实战应用:简单线图与散点图
假设我们有一组关于销售额和广告投入的数据,我们想绘制它们的散点图和趋势线。
<PYTHON>

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
advertising = np.array([50, 60, 70, 80, 90, 100, 110, 120, 130, 140])
sales = np.array([300, 350, 400, 450, 500, 550, 600, 650, 700, 750])

# 1. 创建 Figure 和 Axes
fig, ax = plt.subplots(figsize=(10, 6)) # figsize 用于设置图表大小

# 2. 绘制散点图
ax.scatter(advertising, sales, c='blue', marker='o', label='Sales vs Advertising')

# 3. 绘制趋势线 (使用 NumPy 进行线性拟合)
m, b = np.polyfit(advertising, sales, 1) # 拟合一次多项式 (y = mx + b)
ax.plot(advertising, m*advertising + b, color='red', linestyle='--', label='Trend Line')

# 4. 添加标题和标签
ax.set_title('Sales vs Advertising Spend')
ax.set_xlabel('Advertising Spend ($)')
ax.set_ylabel('Sales ($)')

# 5. 添加图例
ax.legend()

# 6. 显示图表
plt.grid(True) # 添加网格线
plt.show()
应用场景:
绘制样本分布(散点图)。
展示时间序列数据(线图)。
比较不同类别的数据(柱状图、折线图)。
创建复杂的、高度定制化的图表。
二、 Seaborn - 在 Matplotlib 之上增强统计图表
Seaborn 是一个建立在 Matplotlib 之上,用于绘制统计图形的 Python 库。它提供了更美观的默认样式,并且能够轻松绘制许多复杂且有信息量的统计图表,如分布图、关系图、分类图等。
2.1 Seaborn 的核心优势
美观的默认样式: Seaborn 的图表默认就比 Matplotlib 更具吸引力。
高级统计图表: 提供了许多可以直接绘制统计关系和分布的函数。
与 Pandas DataFrame 的良好集成: Seaborn 可以非常方便地直接接受 Pandas DataFrame 作为输入。
主题和颜色板 (Palettes): 易于设置图表主题和使用丰富的颜色板。
2.2 实战应用:多变量关系与分类数据分析
假设我们有一个包含鸢尾花(Iris)数据集,我们要查看不同品种(Species)的萼片长度(SepalLength)和花瓣长度(PetalLength)之间的关系。
<PYTHON>

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

# 加载 Seaborn 自带的 Iris 数据集
iris = sns.load_dataset('iris')

# 1. 使用 pairplot 绘制数据集中的所有变量两两之间的关系
# hue='species' 会根据花的品种为散点图着色,并在边界图上显示品种的分布
sns.pairplot(iris, hue='species', diag_kind='kde', markers=["o", "s", "D"], palette="viridis")

# 2. 添加标题 (pairplot 没有直接添加标题的参数,可以通用 Matplotlib)
plt.suptitle('Pairwise Relationships in Iris Dataset', y=1.02) # y 用于调整标题位置

# 3. 显示图表
plt.show()

# 4. 绘制另一个分类图:根据品种比较萼片长度的分布
plt.figure(figsize=(10, 6))
sns.boxplot(x='species', y='sepal_length', data=iris, palette='muted')
plt.title('Sepal Length Distribution by Species')
plt.xlabel('Species')
plt.ylabel('Sepal Length (cm)')
plt.show()
应用场景:
探索变量间的关系(散点图矩阵 pairplot)。
可视化数据分布(直方图 histplot, 核密度估计图 kdeplot)。
比较不同类别的数据(箱线图 boxplot, 小提琴图 violinplot)。
展示回归模型结果(散点图+回归线 regplot)。
三、 Plotly - 交互式与Web友好型可视化
Plotly 是一个强大的库,专注于创建交互式和Web友好型的可视化。它允许用户缩放、平移、悬停查看数据细节,非常适合数据探索和构建可分享的 Web 应用。Plotly 也可以创建静态图像。
3.1 Plotly 的核心优势
交互性: 默认支持缩放、平移、悬停显示数据信息。
Web 友好: 生成的图表可以轻松嵌入到网页中,可以使用 Dash 框架构建交互式仪表盘。
丰富的图表类型: 支持从基础图表到复杂的 3D 图表、地图等。
美观的默认风格: 图表风格现代且专业。
Plotly Express: Plotly 新推出的 API,提供更简洁、更高级的接口,类似于 Seaborn,使得绘制常见图表更加方便。
3.2 实战应用:交互式数据仪表盘的构建基础
假设我们要可视化一个数据集,其中包含不同城市的天气信息(温度、湿度),并希望能够交互式地探索。
<PYTHON>

import plotly.express as px
import pandas as pd
import numpy as np

# 示例数据:城市天气
cities = ['New York', 'London', 'Tokyo', 'Paris', 'Sydney', 'Beijing']
dates = pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06'])
data = []
for city in cities:
for date in dates:
data.append({
'City': city,
'Date': date,
'Temperature': np.random.uniform(0, 30), # 随机温度
'Humidity': np.random.uniform(30, 90) # 随机湿度
})
df = pd.DataFrame(data)

# 1. 使用 Plotly Express 绘制交互式时间序列折线图
# 语法非常接近 Seaborn, 直接绑定 DataFrame 的列
fig_line = px.line(df, x='Date', y='Temperature', color='City',
title='Temperature Trends in Selected Cities',
labels={'Temperature': 'Temperature (°C)', 'Date': 'Date'},
template='plotly_white') # 使用一种预设主题

# 2. 绘制交互式散点图,显示温度与湿度的关系,并按城市着色
fig_scatter = px.scatter(df, x='Humidity', y='Temperature', color='City',
size='Temperature', # 根据温度设置点的大小
hover_data=['Date', 'City'], # 悬停时显示更多信息
title='Temperature vs Humidity by City',
labels={'Humidity': 'Humidity (%)', 'Temperature': 'Temperature (°C)'},
template='plotly_dark') # 使用另一种预设主题

# 3. 显示图表
# 在 Jupyter Notebook 或类似的交互式环境中,可以直接显示
fig_line.show()
fig_scatter.show()

# 如果需要在报告或静态 html 中保存
# fig_line.write_html("temperature_trends.html")
# fig_scatter.write_html("temp_vs_humidity.html")
应用场景:
构建交互式仪表盘和报告。
用于 Web 应用的数据展示。
需要用户与图表进行深入互动(缩放、选择、查看详情)的场景。
探索多维数据关系。
四、 如何选择合适的库?
Matplotlib:
何时用: 当你需要完全控制图表的每一个细节,创建非常规的图表,或者预算有限(它完全免费且开源),或者需要生成可嵌入到 LaTeX 文档的静态图表时。它是所有可视化工作的基础。
提示: 学习 Matplotlib 的基础知识,能让您更好地理解和定制 Seaborn 和 Plotly 的图表。
Seaborn:
何时用: 当你需要快速、高效地创建具有统计意义和美观的图表,尤其是在探索性数据分析 (EDA) 阶段。它与 Pandas DataFrame 的集成非常顺畅。
提示: 如果你熟悉 Pandas,Seaborn 的 API 会让你觉得非常亲切。
Plotly:
何时用: 当你需要创建高度交互式、可分享的 Web 可视化,或者构建数据仪表盘时。Plotly Express 的 API 让它在日常可视化任务中也变得非常高效。
提示: 结合 Dash 框架,Plotly 可以创建复杂的交互式 Web 应用。
最佳实践:
很多时候,你会发现组合使用这些库是最有效的方式。例如:
使用 Seaborn 快速绘制美观的统计图表。
然后,使用 Matplotlib 对 Seaborn 生成的图表进行微调(如修改字号、坐标轴范围)。
对于需要交互性的展示,则转向 Plotly。
掌握这三款库,你就能应对绝大多数数据可视化需求,将数据转化为生动、有洞察力的信息。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐