跳到主要内容

数据可视化

问题

Python 中有哪些数据可视化库?如何选择?

答案

Matplotlib(基础)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 折线图
axes[0].plot(x, np.sin(x), label="sin(x)", color="blue")
axes[0].plot(x, np.cos(x), label="cos(x)", color="red")
axes[0].set_title("三角函数")
axes[0].legend()
axes[0].grid(True)

# 柱状图
categories = ["A", "B", "C", "D"]
values = [23, 45, 56, 78]
axes[1].bar(categories, values, color=["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4"])
axes[1].set_title("分类对比")

plt.tight_layout()
plt.savefig("chart.png", dpi=150)

Seaborn(统计可视化)

基于 Matplotlib,专为统计图表设计:

import seaborn as sns
import pandas as pd

df = sns.load_dataset("tips")

# 分布图
sns.histplot(df["total_bill"], kde=True)

# 关系图
sns.scatterplot(data=df, x="total_bill", y="tip", hue="day", size="size")

# 热力图
corr = df.select_dtypes(include="number").corr()
sns.heatmap(corr, annot=True, cmap="coolwarm")

# 箱线图
sns.boxplot(data=df, x="day", y="total_bill")

Plotly(交互式)

import plotly.express as px

df = px.data.gapminder()

# 交互式散点图
fig = px.scatter(
df.query("year == 2007"),
x="gdpPercap", y="lifeExp",
size="pop", color="continent",
hover_name="country",
log_x=True, size_max=60,
)
fig.show()

# 动画
fig = px.scatter(
df, x="gdpPercap", y="lifeExp",
animation_frame="year", animation_group="country",
size="pop", color="continent",
)

库选择

类型适用场景
Matplotlib静态论文、报告、底层定制
Seaborn统计探索性分析、统计图
Plotly交互Dashboard、Web 展示
Altair声明式快速探索分析
Bokeh交互大数据交互可视化

常见面试问题

Q1: Matplotlib 和 Seaborn 的关系?

答案

Seaborn 是 Matplotlib 的高级封装。Seaborn 提供更美观的默认样式和统计图表,底层仍然是 Matplotlib。可以混合使用——用 Seaborn 快速画图,用 Matplotlib 微调细节。

Q2: 如何选择图表类型?

答案

数据关系推荐图表
趋势变化折线图
分类对比柱状图
分布直方图、箱线图
相关性散点图、热力图
组成比例饼图、堆叠柱状图

Q3: 大数据量可视化怎么优化?

答案

  1. 降采样:数据量太大时采样显示
  2. WebGL 渲染:Plotly 的 scatterglscatter 快 10x
  3. 分块渲染:Datashader 可以处理亿级数据
  4. 静态输出:大数据量用 Matplotlib 导出图片,避免交互渲染开销

相关链接