python+tushare+mplfinance绘制一只股票的K线图

本文介绍如何使用Python的tushare、pandas和mplfinance库获取股票数据,并绘制指定时间段内的K线图和成交量图。代码实现了从网络获取股票代码为000001.SZ的股票数据,包括开盘价、收盘价、最高价、最低价和成交量,并将其转化为易于绘图的数据格式。

获取一个股票的某段时间内的开盘价、最高价、最低价、收盘价、成交量绘制出K线图及成交量图。

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import mplfinance as mpf
from datetime import datetime
 
ts.set_token('you token')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.SZ', start_date='20200401', \
end_date='20201210')
df['date'] = df['trade_date'].apply\
(lambda x: datetime.strptime(x, '%Y%m%d'))   #将字符串型日期转换成时间戳
data = df.loc[:,['date', 'open','close','high','low','vol']]
data = data.rename(columns={"vol": "volume"})   # 修改列名
data.set_index('date', inplace=True)
data.index.name = "Date"
data = data.sort_index()

mc = mpf.make_marketcolors(up='r',down='g')
s  = mpf.make_mpf_style(marketcolors=mc,\
mavcolors=['#4f8a8b','#fbd46d','#87556f'])
 mpf.plot(data,type='candle',volume=True, \
show_nontrading=True, figratio=(20,10), mav=(5,10,20),style=s)

图形显示为:
在这里插入图片描述

<think>好的,我现在要解决用户的问题:如何使用Python库(如Matplotlib或Plotly)实现股票K线图的交互式缩放。首先,我需要回顾用户提供的引用内容,看看是否有相关的示例或线索。 用户提到了引用[3],其中提到了使用tushare、matplotlib和mpl_finance来绘制股票K线图,但用户现在想要实现缩放功能。根据我的知识,Matplotlib本身支持基本的缩放功能,但可能需要一些额外设置。而Plotly作为交互式可视化库,可能更易于实现缩放等交互功能。不过用户提供的引用中没有直接提到Plotly,所以可能需要结合现有的Matplotlib示例进行扩展。 首先,我需要确认mpl_finance是否仍然可用,因为记得这个库可能已经被弃用,替代库可能是mplfinance。需要检查这一点,避免用户使用时出现问题。然后,使用Matplotlib实现缩放通常可以通过内置的导航工具栏来实现,但用户可能需要知道如何启用或自定义。对于Plotly,则直接支持交互式缩放,用户只需要正确使用Plotly的绘图方法即可。 接下来,我应该分步骤来编写两种方法的示例代码。对于Matplotlib,需要导入必要的库,获取股票数据,绘制K线图,并确保工具栏中的缩放功能可用。对于Plotly,则需要使用Plotly的图形对象来创建K线图,并利用其内置的交互功能。 同时,需要注意用户提到的引用[3]中的安装包,比如tushare、matplotlib、mpl_finance(或mplfinance),以及可能的datetime。在代码示例中,需要包含这些库的导入和使用方法。此外,数据获取部分可能需要使用tushare来获取股票数据,但用户可能需要先安装并配置tushare的API token,这部分需要在代码中注释说明。 在编写Matplotlib示例时,可能会遇到mpl_finance的问题,因此需要改用mplfinance库,并调整绘图方法。例如,使用mplfinance的plot函数来绘制K线图,并设置相应的参数。同时,要确保Matplotlib的Figure和Axes对象正确配置,以便缩放功能正常工作。 对于Plotly的示例,需要导入plotly.graph_objects,并使用Candlestick图表类型。Plotly会自动生成交互式图表,用户可以通过鼠标进行缩放、平移等操作,无需额外代码。这部分相对简单,但需要确保数据格式正确,尤其是时间序列的处理。 另外,用户可能对两种方法的优缺点不太清楚,所以在回答中需要简要比较Matplotlib和Plotly在实现交互式缩放上的差异,比如Matplotlib需要依赖工具栏,而Plotly默认支持更多交互操作。 最后,生成相关问题,可能涉及其他交互功能的实现、数据更新的处理,或者不同库的选择建议。需要确保问题与用户当前需求相关,并引导进一步学习。 现在需要检查代码的正确性,确保语法正确,特别是LaTeX格式的使用。例如,行内公式用$...$,独立公式用$$...$$。不过在这个问题中可能涉及较少的数学公式,但如果有提及性能分析或统计模型,可能需要应用相关格式。 总结步骤: 1. 分析用户需求,确定使用Matplotlib和Plotly两种方法。 2. 确认库的可用性和正确导入方式,处理可能的弃用问题。 3. 编写示例代码,包括数据获取、图表绘制、交互功能实现。 4. 对比两种方法的优缺点,帮助用户选择。 5. 生成相关问题,扩展用户可能的后续疑问。</think>[用户可见层] # 股票K线图交互式缩放功能实现方法 ### 方法一:使用Matplotlib实现缩放 Matplotlib通过`mplfinance`库(原mpl_finance升级版)绘制K线图时,默认支持工具栏缩放功能。以下是完整实现步骤: 1. **安装依赖库** ```bash pip install mplfinance pandas tushare ``` 2. **代码实现** ```python import pandas as pd import tushare as ts import mplfinance as mpf # 获取股票数据(示例使用tushare) ts.set_token('YOUR_API_TOKEN') # 需到tushare官网注册获取 pro = ts.pro_api() df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20230331') # 转换数据格式 df = df.rename(columns={'trade_date':'Date','open':'Open','high':'High','low':'Low','close':'Close','vol':'Volume'}) df['Date'] = pd.to_datetime(df['Date']) df.set_index('Date', inplace=True) # 绘制带缩放功能的K线图 mpf.plot(df, type='candle', title='Stock K-line Chart', ylabel='Price', volume=True, style='charles', figratio=(12,6), mav=(5,10)) ``` **交互说明**: - 图表默认显示缩放工具栏 - 点击![放大图标]可框选区域放大 - 点击![主页图标]恢复原始视图 - 支持鼠标滚轮缩放[^3] --- ### 方法二:使用Plotly实现高级交互 Plotly通过`plotly.graph_objects`实现更丰富的交互功能: ```python import plotly.graph_objects as go import pandas as pd import tushare as ts # 获取数据(同上) # ... # 创建K线图对象 fig = go.Figure(data=[go.Candlestick( x=df.index, open=df['Open'], high=df['High'], low=df['Low'], close=df['Close'] )]) # 添加交互控制 fig.update_layout( title='Interactive K-line Chart', xaxis_rangeslider_visible=True, dragmode='pan', # 拖拽模式 hovermode='x unified', width=1200, height=600 ) # 显示图表 fig.show() ``` **交互特性**: 1. 鼠标滚轮缩放(支持X/Y轴单独缩放) 2. 双指手势触控缩放(移动端) 3. 范围滑块实时调整显示区间 4. 右键框选局部放大 5. 自动显示十字光标读数[^2] --- ### 方案对比 | 特性 | Matplotlib | Plotly | |---------------------|--------------------------|-------------------------| | 渲染性能 | 适合静态图 | 适合动态交互 | | 缩放操作 | 基础工具栏 | 多模式智能缩放 | | 移动端适配 | 需额外配置 | 原生支持触控手势 | | 数据更新 | 需重新绘制 | 支持动态更新 | | 学习曲线 | 较低 | 中等 | ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhaojieming1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值