📈 为什么要画图?
一图胜千言!数据可视化可以:
- 📊 直观看出趋势
- 🔍 发现异常值
- 📈 展示策略效果
👨💻 安装
pip install matplotlib
🎨 第一个例子:折线图
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 17, 20]
# 画图
plt.plot(x, y)
# 显示
plt.show()
🎨 基础设置
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"] # 显示中文
plt.rcParams["axes.unicode_minus"] = False # 显示负号
# 数据
days = ["周一", "周二", "周三", "周四", "周五"]
prices = [100, 102, 101, 105, 110]
# 画图
plt.figure(figsize=(10, 6)) # 图大小
plt.plot(days, prices, color="red", linewidth=2, marker="o")
plt.title("股票价格走势", fontsize=16)
plt.xlabel("日期", fontsize=12)
plt.ylabel("价格(元)", fontsize=12)
plt.grid(True) # 网格
plt.show()
📊 多条线
import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5]
stock_a = [100, 102, 105, 103, 110]
stock_b = [50, 52, 51, 55, 58]
plt.figure(figsize=(10, 6))
plt.plot(days, stock_a, label="股票A", color="red")
plt.plot(days, stock_b, label="股票B", color="blue")
plt.legend() # 显示图例
plt.title("两只股票对比")
plt.show()
📊 子图(多个小图)
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
# 第一个图
axes[0, 0].plot([1, 2, 3], [1, 4, 9])
axes[0, 0].set_title("平方")
# 第二个图
axes[0, 1].plot([1, 2, 3], [1, 8, 27])
axes[0, 1].set_title("立方")
# 第三个图
axes[1, 0].bar(["A", "B", "C"], [3, 7, 5])
axes[1, 0].set_title("柱状图")
# 第四个图
axes[1, 1].pie([30, 40, 30], labels=["A", "B", "C"])
axes[1, 1].set_title("饼图")
plt.tight_layout()
plt.show()
💡 量化实战:画股价和均线
import akshare as ak
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 获取数据
df = ak.stock_zh_a_hist(symbol="600519", adjust="qfq")
df = df.tail(30)
# 计算均线
df["MA5"] = df["收盘"].rolling(5).mean()
df["MA20"] = df["收盘"].rolling(20).mean()
# 画图
plt.figure(figsize=(12, 6))
plt.plot(df["日期"], df["收盘"], label="收盘价", color="black", linewidth=2)
plt.plot(df["日期"], df["MA5"], label="5日均线", color="red")
plt.plot(df["日期"], df["MA20"], label="20日均线", color="blue")
plt.title("茅台股价与均线")
plt.xlabel("日期")
plt.ylabel("价格(元)")
plt.legend()
plt.xticks(rotation=45)
plt.grid(True)
plt.show()
📚 下一课
学会了画图,我们来学RSI指标——判断股票是涨是跌!