Python获取股票K线图最值并绘制矩形图

一、获取股票历史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()

 

根据缠中说禅里说的需要对包含进行标准化处理,应该怎么进行整合呢,还没有想好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值