3. 绘制股票最高价与最低价范围图
任务说明
给定某只股票在一段时间内的每日最高价与最低价数据,绘制一张范围图(Range Chart),用垂直线段直观展示每个交易日股价的波动区间,并叠加收盘价折线以观察价格走势。输入数据为CSV格式,包含日期、最高价、最低价、收盘价四列。
实现方案
使用Matplotlib的vlines函数绘制每日价格区间垂直线,横轴为日期,纵轴为价格;再用plot绘制收盘价折线。日期解析使用Pandas,图形尺寸与标签做必要配置,最终保存为PNG文件并显示。
代码实现
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# 准备样例数据(实际使用时替换为真实CSV路径)
data = {
'date': ['2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05',
'2024-01-08', '2024-01-09', '2024-01-10', '2024-01-11'],
'high': [152.3, 155.1, 149.8, 158.6, 160.2, 157.4, 162.8, 159.5],
'low': [148.2, 150.5, 146.9, 153.2, 155.8, 152.1, 158.3, 155.0],
'close':[151.5, 153.8, 148.6, 156.9, 159.4, 154.2, 161.5, 157.8]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
# 创建图形
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制最高价-最低价范围线
ax.vlines(df['date'], df['low'], df['high'],
color='#e74c3c', linewidth=2, label='最高-最低范围')
# 绘制收盘价折线
ax.plot(df['date'], df['close'], color='#2e86de',
linewidth=1.8, marker='o', markersize=4, label='收盘价')
# 格式化x轴日期
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
# 标签与图例
ax.set_xlabel('日期')
ax.set_ylabel('价格(元)')
ax.set_title('股票最高价与最低价范围图')
ax.legend()
ax.grid(True, linestyle='--', alpha=0.6)
plt.tight_layout()
plt.savefig('stock_range_chart.png', dpi=150)
plt.show()
运行与验证
依赖安装:需要pandas和matplotlib,执行pip install pandas matplotlib。
运行方式:将上述代码保存为range_chart.py,在命令行执行python range_chart.py。
验证方法:程序运行后,当前目录下生成stock_range_chart.png,同时弹出图形窗口。检查图中每个交易日均有一条红色竖直线,其顶端对应当日最高价、底端对应最低价;蓝色折线连接各日收盘价,且收盘价点始终位于对应红色竖直线范围内(即收盘价介于最高价与最低价之间)。若数据中某日收盘价超出范围,说明输入数据有误,需检查CSV源文件。
判定标准:图形正确显示8个交易日的价格区间与收盘走势,坐标轴标签、图例、日期刻度清晰可读,保存的PNG文件与窗口显示一致,即视为通过。