最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Tkinter實現股票K線圖的繪制

 更新時間:2022年08月25日 10:37:16   作者:周蘿卜  
K線圖又稱蠟燭圖,常用說法是“K線”。K線是以每個分析周期的開盤價、最高價、最低價和收盤價繪制而成。本文將利用Python+Tkinter實現股票K線圖的繪制,需要的可以參考一下

在前面的文章中,我們一起學習了如何通過 Python 抓取東方財富網的實時股票數據以及如何制作成 Tkinter GUI 程序,鏈接如下

用 Python 爬取股票實時數據 

Tkinter制作股票數據抓取小程序,有點秀!

今天我們就在這個基礎上,在 Tkinter 程序中繪制 K 線圖,一起來看看吧

子窗口

我們今天的整體代碼還是基于上次的 Tkinter 股票程序,在主類 MainCreator 下面創(chuàng)建一個函數 create_subwindow

????def?create_subwindow(self):
????????t?=?ttk.Toplevel()
????????t.wm_title("K線圖")
????????sub_window?=?SubWindiw()
????????sub_window.subWindow(t)

我們這里使用 Toplevel 來創(chuàng)建子窗口,再來看看子窗口相關的代碼

class?SubWindiw:
????def?__init__(self):
????????pass
????def?all_files(self):
??????...
????def?getDate(self):
??????...
????def?subWindow(self,?root_frame):
??????...
????def?go(self):
??????...

對于子窗口代碼,subWindow 函數是子窗口的主要函數

子窗口框架

子窗口主要代碼如下

????def?subWindow(self,?root_frame):
????????file_list?=?self.all_files()

????????#?創(chuàng)建主框架
????????main_frame?=?ttk.Frame(root_frame)
????????main_frame.pack()

????????#?在主框架下創(chuàng)建股票日期輸入框子框架
????????date_frame?=?ttk.Frame(main_frame,?relief=tix.SUNKEN)
????????date_frame.pack(fill=X,?side=TOP)
????????#?創(chuàng)建標簽‘開始日期'
????????date_start_label?=?ttk.Label(date_frame,?text='開始日期')
????????date_start_label.pack(side=LEFT)
????????#?創(chuàng)建開始日期代碼輸入框
????????re_date?=?self.getDate()
????????self.de_start?=?ttk.DateEntry(date_frame,?startdate=re_date)
????????self.de_start.pack(side=LEFT,?padx=4,?pady=4)
????????#?創(chuàng)建標簽‘結束日期'
????????date_end_label?=?ttk.Label(date_frame,?text='結束日期')
????????date_end_label.pack(side=LEFT)
????????#?創(chuàng)建結束日期代碼輸入框
????????self.de_end?=?ttk.DateEntry(date_frame)
????????self.de_end.pack(side=LEFT,?padx=4,?pady=4)

????????#?在主框架下創(chuàng)建查詢按鈕子框架
????????search_frame?=?ttk.Frame(main_frame,?relief=tix.SUNKEN)
????????search_frame.pack(fill=X,?side=TOP)
????????#?文件選擇框
????????search_label?=?ttk.Label(search_frame,?text='選擇股票文件')
????????search_label.pack(side=LEFT)
????????values?=?file_list
????????self.cbo?=?ttk.Combobox(
????????????master=search_frame,
????????????values=values,
????????????width=45,
????????)
????????self.cbo.pack(side=LEFT,?expand=YES,?pady=5,?fill=X)

????????#?占位?check?button
????????cb?=?ttk.Checkbutton(search_frame,?text="占位")
????????#?cb.pack(side=LEFT,?padx=5,?fill=X)

????????#?創(chuàng)建查詢按鈕并設置功能
????????stock_find?=?ttk.Button(search_frame,?text='查詢',?command=self.go)
????????stock_find.pack(pady=4,?expand=YES,?side=LEFT)

????????#?創(chuàng)建股票圖形輸出框架
????????self.stock_graphics?=?tk.Frame(root_frame,?relief=tix.RAISED)
????????self.stock_graphics.pack(expand=1,?fill=tix.BOTH,?anchor=tix.CENTER)

主要還是分三個區(qū)域,日期選擇區(qū)域,股票文件選擇區(qū)域以及K線圖展示區(qū)域

還有兩個功能性函數 all_files 和 getDate

all_files

????def?all_files(self):
????????file_list?=?[]
????????for?root,?dirs,?files?in?os.walk("./"):
????????????for?f?in?files:
????????????????if?'csv'?in?f?and?'days'?in?f:
????????????????????file_list.append(f)
????????return?file_list

getDate

????def?getDate(self):
????????today?=?datetime.datetime.now()
????????offset?=?datetime.timedelta(days=-1)
????????re_date?=?(today?+?offset).strftime('%Y/%m/%d')
????????return?today?+?offset

繪制K線圖

最后我們看看繪制K線圖的代碼

????def?go(self):
????????code_name?=?self.cbo.get()
????????start_date?=?self.de_start.entry.get()
????????end_date?=?self.de_end.entry.get()
????????gupiao_file?=?self.cbo.get()
????????if?not?gupiao_file:
????????????messbox.showerror("股票文件為空",?"請選擇股票數據文件!")
????????????return
????????stock_data?=?pd.read_csv(gupiao_file)
????????data?=?stock_data.loc[:,?['時間',?'開盤價',
??????????????????????????????????'收盤價',?'最高價',?'最低價',?'成交量(手)']]??#?:取所有行數據,后面取date列,open列等數據
????????data?=?data.rename(columns={'時間':?'Date',?'開盤價':?'Open',
????????????????????????????????????'收盤價':?'Close',?'最高價':?'High',?'最低價':?'Low',
????????????????????????????????????'成交量(手)':?'Volume'})??#?更換列名,為后面函數變量做準備
????????data.set_index('Date',?inplace=True)??#?設置date列為索引,覆蓋原來索引,這個時候索引還是 object 類型,就是字符串類型。
????????#?將object類型轉化成 DateIndex 類型,pd.DatetimeIndex 是把某一列進行轉換,同時把該列的數據設置為索引 index。
????????data.index?=?pd.DatetimeIndex(data.index)
????????data?=?data.sort_index(ascending=True)??#?將時間順序升序,符合時間序列
????????data?=?data[data.index?<?end_date][data.index?>?start_date]

????????if?not?data.values.any():
????????????print("股票數據為空")
????????????messbox.showerror("股票數據為空",?"請選擇合理的時間!")
????????????return
????????my_color?=?mpf.make_marketcolors(up='r',
?????????????????????????????????????????down='g',
?????????????????????????????????????????edge='inherit',
?????????????????????????????????????????wick='inherit',
?????????????????????????????????????????volume='inherit')
????????#?設置圖表的背景色
????????my_style?=?mpf.make_mpf_style(marketcolors=my_color,
??????????????????????????????????????figcolor='#002B36',
??????????????????????????????????????facecolor='#002B36',
??????????????????????????????????????edgecolor='w',
??????????????????????????????????????#?gridcolor='(0.82,?0.83,?0.85)',
??????????????????????????????????????rc={'font.family':?'SimHei',
??????????????????????????????????????????'xtick.labelcolor':?'white',
??????????????????????????????????????????'ytick.labelcolor':?'white',
??????????????????????????????????????????'axes.labelcolor':?'white',
??????????????????????????????????????????})
????????self.fig,?self.axlist?=?mpf.plot(data,?style=my_style,?type='candle',
?????????????????????????????????????????mav=(5,?10,?20),?volume=True,?show_nontrading=False,?returnfig=True)
????????canvas?=?FigureCanvasTkAgg(self.fig,?master=self.stock_graphics)??#?設置tkinter繪制區(qū)
????????if?len(self.stock_graphics.winfo_children())?==?2:
????????????self.stock_graphics.winfo_children()[0].destroy()
????????canvas.draw()

????????canvas._tkcanvas.pack(side=BOTTOM,?fill=BOTH,?expand=1)

我們通過 Matplotlib + mplfinance 來繪制K線圖

首先是通過 Pandas 來處理數據,把我們爬取到的數據處理成 mplfinance 需要的格式,如下

接下來只需要調用plot函數即可

self.fig,?self.axlist?=?mpf.plot(data,?style=my_style,?type='candle',
?????????????????????????????????????????mav=(5,?10,?20),?volume=True,?show_nontrading=False,?returnfig=True)

到此這篇關于Python+Tkinter實現股票K線圖的繪制的文章就介紹到這了,更多相關Python Tkinter股票K線圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python中異常捕獲與處理的方法總結

    Python中異常捕獲與處理的方法總結

    Python異常是在程序執(zhí)行時發(fā)生的錯誤,可能會導致程序終止運行。這篇文章主要為大家總結了Python中異常捕獲與處理的方法,需要的可以參考一下
    2023-04-04
  • python機器學習樸素貝葉斯算法及模型的選擇和調優(yōu)詳解

    python機器學習樸素貝葉斯算法及模型的選擇和調優(yōu)詳解

    這篇文章主要為大家介紹了python機器學習樸素貝葉斯及模型的選擇和調優(yōu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • 2024最新Pytorch安裝圖文教程(Anaconda+GPU)

    2024最新Pytorch安裝圖文教程(Anaconda+GPU)

    本文詳細介紹了如何使用Anaconda創(chuàng)建虛擬環(huán)境,并在該環(huán)境中安裝CUDA和cuDNN,最后安裝支持GPU的PyTorch,本文通過圖文并茂的形式給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-11-11
  • python 利用matplotlib在3D空間繪制二次拋物面的案例

    python 利用matplotlib在3D空間繪制二次拋物面的案例

    這篇文章主要介紹了python 利用matplotlib在3D空間繪制二次拋物面的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Python優(yōu)雅處理日志記錄的方法小結

    Python優(yōu)雅處理日志記錄的方法小結

    日志記錄在軟件開發(fā)中扮演著至關重要的角色,它不僅可以幫助開發(fā)人員跟蹤應用程序的狀態(tài)和行為,還能提供有價值的診斷信息,本文將深入探討?Python?中優(yōu)雅處理日志的方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • Python?Pandas條件篩選功能

    Python?Pandas條件篩選功能

    這篇文章主要介紹了Python?Pandas條件篩選功能,篩選是在平時的工作中使用非常頻繁的功能了,下文詳細的相關資料介紹,需要的小伙伴可以參考一下
    2022-03-03
  • Python實現PS圖像調整之對比度調整功能示例

    Python實現PS圖像調整之對比度調整功能示例

    這篇文章主要介紹了Python實現PS圖像調整之對比度調整功能,結合實例形式分析了Python實現PS圖像對比度調整的原理、實現方法及相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • 新手該如何學python怎么學好python?

    新手該如何學python怎么學好python?

    怎么學好python?怎么靈活應用python?
    2008-10-10
  • Python 并列和或者條件的使用說明

    Python 并列和或者條件的使用說明

    這篇文章主要介紹了Python 并列和或者條件的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python動態(tài)進度條的實現代碼

    python動態(tài)進度條的實現代碼

    有時候我們需要使用print打印工作進度,正常使用print函數會導致刷屏的現象,本文通過實例代碼給大家介紹python動態(tài)進度條的實現方法,感興趣的朋友跟隨小編一起看看吧
    2019-07-07

最新評論

仁布县| 金秀| 水城县| 上犹县| 兴海县| 宜章县| 藁城市| 宝应县| 钦州市| 武平县| 农安县| 景宁| 玛沁县| 荥经县| 峡江县| 建平县| 邯郸县| 墨竹工卡县| 闻喜县| 丹寨县| 荆州市| 北川| 凤冈县| 拜泉县| 墨脱县| 汝州市| 庆阳市| 西丰县| 化州市| 宝应县| 梓潼县| 长白| 呼和浩特市| 西贡区| 荣昌县| 罗城| 上虞市| 郧西县| 新化县| 长兴县| 漳浦县|