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')

运行方式

  1. 将上述CSV内容保存为 stock_data.csv,代码保存为 plot_stock.py,两者置于同一目录;
  2. 确保已安装依赖:pip install pandas matplotlib;
  3. 在终端执行:python plot_stock.py。

验证方法

运行后,当前目录下应生成 stock_open_close_comparison.png 文件。打开图片检查:

  • 蓝色折线(开盘价)与红色折线(收盘价)均包含10个数据点,与CSV数据一一对应;
  • 两条折线在2024-03-05附近出现明显交叉(开盘10.1低于收盘10.8,而前一日开盘10.6高于收盘10.3),反映价格日内强弱变化;
  • 图例、网格、坐标轴标签完整,日期刻度显示为“月-日”格式。

满足以上条件即判定案例实现正确。

数据与图表映射关系 stock_data.csv(前5行) date open close 03-01 10.2 10.5 03-04 10.6 10.3 03-05 10.1 10.8 03-06 10.9 10.7 03-07 10.5 11.2 ······ open → 蓝色折线 close → 红色折线 12.5 11.5 10.5 9.5 03-01 03-05 03-08 03-12 03-14 交叉 开盘价 收盘价 输出:stock_open_close_comparison.png