一、获取股票历史K线数据存储至CSV文件
import akshare as ak
import pandas as pd
# 股票代码(云南白药)
stock_code = "000538"
# 获取日K线数据
data = ak.stock_zh_a_hist(symbol=stock_code, period="daily", start_date="20250201", end_date="20250228")
# 提取最高价和最低价
high_low_data = data[['日期', '最高', '最低']]
# 保存到CSV文件
high_low_data.to_csv('stock_high_low.csv', index=False)
print("数据已保存到 stock_high_low.csv")
二、读取CSV文件绘制矩形图
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# 设置全局字体为支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 读取CSV文件
data = pd.read_csv('stock_high_low.csv')
# 提取数据
highs = data['最高']
lows = data['最低']
dates = data['日期']
# 创建图形和子图
fig, ax = plt.subplots(figsize=(12, 6))
# 矩形宽度
width = 0.6
# 绘制矩形并添加数值标签
for i, (high, low) in enumerate(zip(highs, lows)):
height = high - low
rect = patches.Rectangle((i - width / 2, low), width, height,
linewidth=1, edgecolor='black', facecolor='blue')
ax.add_patch(rect)
# 在矩形顶端显示数值
ax.text(i, high+0.1, f'{high:.2f}', ha='center', va='bottom', fontsize=8, color='black')
# 在矩形底部显示数值
ax.text(i, low-0.1, f'{low:.2f}', ha='center', va='top', fontsize=8, color='black')
# 提取所有出现的数值
all_values = pd.concat([highs, lows]).unique()
# 绘制横向虚线(仅在前一个数据和下一个数据之间)
for value in all_values:
# 找到所有出现该值的位置
indices = data[(data['最高'] == value) | (data['最低'] == value)].index
for idx in indices:
# 确定前一个数据和下一个数据的范围
prev_idx = max(idx - 1, 0)
next_idx = min(idx + 1, len(data) - 1)
# 绘制虚线
ax.hlines(y=value, xmin=prev_idx, xmax=next_idx,
color='gray', linestyle='--', linewidth=0.5, alpha=0.5)
# 设置坐标轴范围
ax.set_xlim(-1, len(data))
ax.set_ylim(min(lows) - 1, max(highs) + 1)
# 设置x轴刻度
ax.set_xticks(range(len(data)))
ax.set_xticklabels(dates, rotation=45, ha='right')
# 设置坐标轴标签
ax.set_xlabel('日期')
ax.set_ylabel('价格')
# 设置标题
plt.title('云南白药日K线图(带局部横向虚线)')
# 显示网格
plt.grid(True, linestyle='--', alpha=0.5)
# 调整布局
plt.tight_layout()
# 显示图形
plt.show()
根据缠中说禅里说的需要对包含进行标准化处理,应该怎么进行整合呢,还没有想好