使用PyQtGraph绘制股票K线图的攻略可以分为以下几个步骤:
- 安装PyQtGraph
PyQtGraph是一个用于科学计算的Python图形库,支持多种图形类型,如曲线图、散点图和3D图。可以通过在命令行中输入以下命令安装:
pip install pyqtgraph
- 导入所需库和数据
在代码中导入所需的PyQtGraph库和其他必要的库。然后,使用pandas库导入股票数据。可以从Yahoo Finance等财经网站上获取历史股票数据。这里使用了pandas_datareader库获取某公司从2016年至今的股票行情数据。导入数据后,我们还需要对其进行必要的处理。
import pyqtgraph as pg
import pandas as pd
import pandas_datareader.data as web
df = web.DataReader('AAPL', 'yahoo', '2016', '2021')
df = df.reset_index()
df['date'] = df['Date'].apply(lambda x: x.strftime('%Y-%m-%d'))
df = df.loc[:, ["date", "Open", "High", "Low", "Close"]]
- 绘制K线图
使用PyQtGraph的CandlestickItem来绘制K线图。需要在绘制之前对数据进行适当的调整。绘制K线图后,我们可以设置坐标轴的标签、线条颜色等属性。
def plot_kline():
kline_plot = pg.plot()
kline_plot.setWindowTitle('AAPL Stock K Line')
kline_plot.showGrid(x=True, y=True)
kline_plot.setLabel(axis='bottom', text='Date')
kline_plot.setLabel(axis='left', text='Price')
kline = pg.CandlestickItem(df['Open'], df['High'], df['Low'], df['Close'])
kline_plot.addItem(kline)
kline.curve.setPen(pg.mkPen('r'))
kline.setOpts(up='green', down='red')
- 添加自定义功能
可以使用PyQtGraph的自定义功能,如交互式缩放、拖动和绘制自定义区域。可以在代码中添加以下功能:
kline_plot.setMouseEnabled(x=True, y=False)
region = pg.LinearRegionItem([df.index[-100], df.index[-1]])
region.setZValue(10)
kline_plot.addItem(region)
def update_region(window, viewRange):
rgn = viewRange[0]
region.setRegion(rgn)
region.sigRegionChanged.connect(update_plot)
def update_plot():
rgn = region.getRegion()
mask = (df.index > int(rgn[0])) & (df.index < int(rgn[1]))
subset_df = df.loc[mask]
kline.setData(subset_df['Open'], subset_df['High'], subset_df['Low'], subset_df['Close'])
以上代码添加了一个交互式区域,可以用鼠标拖动该区域来更改显示时间范围,也可以使用滚轮进行缩放。另外,可以使用update_plot函数针对新的时间范围更新K线图。
示例1:修改K线颜色
我们可以在PyQtGraph中使用多种颜色创建CandlestickItem对象,将颜色作为参数传递给setOpts方法。以下代码将涨幅的颜色设置为绿色,跌幅的颜色设置为红色。
kline.setOpts(up='green', down='red')
示例2:添加数据标签
我们可以在K线上添加一些数据标签,以更好地展示数据。以下代码为K线上每个点添加了数据标签。
for i in range(len(df)):
text = pg.TextItem(html=f'<div style="text-align: center"><span style="color: white; font-size: 10pt">{df.loc[i, "Close"]}</span></div>', anchor=(0.5, 0.5))
kline_plot.addItem(text)
text.setPos(i, df.loc[i, "Close"])
以上代码为每一个股价点上添加了一个文字标签,用于展示该点的股价。这里使用了PyQtGraph的TextItem对象,并设置了标签的颜色和字体大小,以及标签的位置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用PyQtGraph绘制精美的股票行情K线图的示例代码 - Python技术站