您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎样在GUI窗口中绘制一个茅台股票K线图
## 前言
在金融数据分析领域,K线图(Candlestick Chart)是展示股票价格走势的重要工具。本文将详细介绍如何使用Python的`matplotlib`和`mplfinance`库,在GUI窗口中绘制贵州茅台(600519.SH)的股票K线图。我们将通过Tkinter创建图形用户界面,并实现数据获取、图表绘制和交互功能。
---
## 一、环境准备
### 1.1 安装必要库
```bash
pip install matplotlib mplfinance pandas yfinance tk
yfinance
: 从Yahoo Finance获取股票数据mplfinance
: 专业金融图表绘制库tkinter
: Python标准GUI工具包import yfinance as yf
# 获取贵州茅台2023年数据
maotai = yf.Ticker("600519.SS")
df = maotai.history(period="1y")
# 确保日期为datetime类型
df.index = pd.to_datetime(df.index)
# 保留必要列
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
root = tk.Tk()
root.title("茅台股票K线图分析")
root.geometry("1000x800")
control_frame = tk.Frame(root)
control_frame.pack(side=tk.TOP, fill=tk.X)
# 添加时间范围选择
tk.Label(control_frame, text="时间范围:").pack(side=tk.LEFT)
periods = ["1月", "3月", "6月", "1年", "全部"]
period_var = tk.StringVar(value="1年")
tk.OptionMenu(control_frame, period_var, *periods).pack(side=tk.LEFT)
import mplfinance as mpf
fig, axes = mpf.plot(
df,
type='candle',
style='charles',
title='贵州茅台(600519.SH)',
ylabel='价格(元)',
volume=True,
returnfig=True
)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
def refresh_chart():
period_map = {
"1月": "1mo",
"3月": "3mo",
"6月": "6mo",
"1年": "1y",
"全部": "max"
}
new_df = maotai.history(period=period_map[period_var.get()])
# 更新绘图...
def add_ma():
mpf.plot(df, type='candle', mav=(5,10,20), style='charles')
import tkinter as tk
import yfinance as yf
import mplfinance as mpf
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
class StockApp:
def __init__(self, master):
self.master = master
self.setup_ui()
self.load_data()
def setup_ui(self):
# 控制面板
control_frame = tk.Frame(self.master)
control_frame.pack(side=tk.TOP, fill=tk.X)
# 时间范围选择
tk.Label(control_frame, text="时间范围:").pack(side=tk.LEFT)
self.period_var = tk.StringVar(value="1年")
periods = ["1月", "3月", "6月", "1年", "全部"]
tk.OptionMenu(control_frame, self.period_var, *periods,
command=self.refresh_chart).pack(side=tk.LEFT)
# 技术指标按钮
tk.Button(control_frame, text="添加均线",
command=self.add_ma).pack(side=tk.LEFT)
def load_data(self):
self.maotai = yf.Ticker("600519.SS")
self.refresh_chart()
def refresh_chart(self, *args):
period_map = {"1月":"1mo", "3月":"3mo", "6月":"6mo", "1年":"1y", "全部":"max"}
df = self.maotai.history(period=period_map[self.period_var.get()])
fig, _ = mpf.plot(
df,
type='candle',
style='charles',
title=f'贵州茅台(600519.SH) - {self.period_var.get()}',
ylabel='价格(元)',
volume=True,
returnfig=True
)
if hasattr(self, 'canvas'):
self.canvas.get_tk_widget().destroy()
self.canvas = FigureCanvasTkAgg(fig, master=self.master)
self.canvas.draw()
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
if __name__ == "__main__":
root = tk.Tk()
app = StockApp(root)
root.mainloop()
添加更多技术指标:
talib
库计算专业指标交互增强:
样式美化:
seaborn
风格本文详细演示了如何在Python GUI中创建专业的茅台股票K线图。通过组合yfinance
、mplfinance
和tkinter
,我们可以构建功能完善的金融分析工具。读者可以在此基础上扩展更多功能,如添加交易策略回测、实时数据更新等高级特性。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。