4. 绘制股票开盘价与收盘价对比图
任务说明
本案例使用Python从本地CSV文件读取股票历史日线数据,绘制开盘价与收盘价的对比折线图,直观展示两者随时间的变化趋势及差异。最终输出一个包含图例、网格、标题的静态图表文件。
数据准备
创建示例数据文件 stock_data.csv,包含10个交易日的日期、开盘价与收盘价(单位:元):
date,open,close
2024-03-01,10.2,10.5
2024-03-04,10.6,10.3
2024-03-05,10.1,10.8
2024-03-06,10.9,10.7
2024-03-07,10.5,11.2
2024-03-08,11.0,10.9
2024-03-11,11.3,11.6
2024-03-12,11.5,11.2
2024-03-13,11.0,11.8
2024-03-14,11.9,12.1
完整代码实现
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# 读取CSV数据
df = pd.read_csv('stock_data.csv', parse_dates=['date'])
# 创建图表,设置画布尺寸
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制开盘价与收盘价折线
ax.plot(df['date'], df['open'], marker='o', linewidth=1.5,
label='开盘价', color='#1f77b4')
ax.plot(df['date'], df['close'], marker='s', linewidth=1.5,
label='收盘价', color='#d62728')
# 设置标题与坐标轴标签
ax.set_title('股票开盘价与收盘价对比图', fontsize=14, pad=12)
ax.set_xlabel('日期', fontsize=11)
ax.set_ylabel('价格(元)', fontsize=11)
# 格式化x轴日期显示
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d'))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
plt.xticks(rotation=45)
# 添加网格与图例
ax.grid(True, linestyle='--', alpha=0.6)
ax.legend(loc='best')
# 自动调整布局并保存
plt.tight_layout()
plt.savefig('stock_open_close_comparison.png', dpi=150)
print('图表已保存为 stock_open_close_comparison.png')
运行方式
- 将上述CSV内容保存为
stock_data.csv,代码保存为plot_stock.py,两者置于同一目录; - 确保已安装依赖:
pip install pandas matplotlib; - 在终端执行:
python plot_stock.py。
验证方法
运行后,当前目录下应生成 stock_open_close_comparison.png 文件。打开图片检查:
- 蓝色折线(开盘价)与红色折线(收盘价)均包含10个数据点,与CSV数据一一对应;
- 两条折线在2024-03-05附近出现明显交叉(开盘10.1低于收盘10.8,而前一日开盘10.6高于收盘10.3),反映价格日内强弱变化;
- 图例、网格、坐标轴标签完整,日期刻度显示为“月-日”格式。
满足以上条件即判定案例实现正确。