03 - 数据可视化¶
学习时间: 2-3小时 重要性: ⭐⭐⭐⭐ 数据探索和结果展示
🎯 学习目标¶
- 掌握Matplotlib基础
- 能绘制常用图表
- 学会美化图表
📊 Matplotlib基础¶
Python
import matplotlib.pyplot as plt
import numpy as np
# 设置中文显示(跨平台兼容)
import platform
system = platform.system()
if system == 'Windows':
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'Arial Unicode MS']
elif system == 'Darwin': # macOS
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei', 'Heiti TC']
else: # Linux
plt.rcParams['font.sans-serif'] = ['WenQuanYi Micro Hei', 'SimHei', 'Noto Sans CJK SC']
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 最简单的图表
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.show()
# 添加标题和标签
plt.plot(x, y)
plt.title('简单折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
📈 常用图表¶
折线图¶
Python
# 单条线
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='sin(x)')
plt.plot(x, np.cos(x), label='cos(x)')
plt.title('三角函数')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()
散点图¶
Python
# 基本散点图
x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x, y)
plt.title('散点图')
plt.show()
# 带颜色和大小
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)
plt.colorbar()
plt.show()
柱状图¶
Python
categories = ['A', 'B', 'C', 'D']
values = [20, 35, 30, 35]
plt.bar(categories, values)
plt.title('柱状图')
plt.xlabel('类别')
plt.ylabel('值')
plt.show()
# 水平柱状图
plt.barh(categories, values)
plt.show()
直方图¶
Python
data = np.random.randn(1000)
plt.hist(data, bins=30, edgecolor='black')
plt.title('直方图')
plt.xlabel('值')
plt.ylabel('频数')
plt.show()
箱线图¶
Python
data = [np.random.randn(100) for _ in range(4)]
plt.boxplot(data, labels=['A', 'B', 'C', 'D'])
plt.title('箱线图')
plt.show()
🎨 图表美化¶
Python
# 完整示例
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, np.sin(x), label='sin(x)', linewidth=2, color='blue')
ax.plot(x, np.cos(x), label='cos(x)', linewidth=2, color='red')
ax.set_title('三角函数', fontsize=16, pad=20)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.legend(fontsize=12)
ax.grid(True, linestyle='--', alpha=0.6)
ax.set_xlim(0, 10)
ax.set_ylim(-1.2, 1.2)
plt.tight_layout()
plt.show()
📊 Pandas集成¶
Python
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
'year': [2018, 2019, 2020, 2021, 2022],
'sales': [100, 120, 150, 180, 200],
'profit': [20, 25, 30, 35, 40]
})
# 直接从DataFrame绘图
df.plot(x='year', y='sales', kind='line', figsize=(10, 6))
plt.title('销售额趋势')
plt.show()
# 多列
df.plot(x='year', y=['sales', 'profit'], kind='line')
plt.show()
# 柱状图
df.plot(x='year', y='sales', kind='bar')
plt.show()
# 散点图
df.plot(x='sales', y='profit', kind='scatter')
plt.show()
📝 练习¶
- 绘制正弦和余弦函数的对比图
- 创建一个分类数据的柱状图
- 可视化Pandas DataFrame的数据
🎯 自我检查¶
- 能绘制基本的图表类型
- 能美化图表
- 能从DataFrame直接绘图
下一步: 04 - 实战项目