Python數據可視化:使用pyqtgraph庫輕鬆繪製股票K線圖

2021-01-08 編碼那些事

引言

pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於其在內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此它在大數據量的處理及快速顯示方面有著天然的優勢,非常適合於需要快速繪圖更新、視頻或實時交互性的操作場合,在數學、科學和工程領域都有著廣泛的應用。

對於pyqtgraph繪圖庫,前面已經寫了幾篇文章介紹了該庫的基本使用方法,包括如何連續刷新波形圖、如何逐點刷新波形圖、如何顯示多幅多條曲線及如何自定義坐標軸字符信息等內容,詳細請參考前面的文章。

這次給大家介紹一下如何使用該庫繪製股票k線圖。

K線圖介紹

對於股票交易者來講,K線圖是弄清股票一段時間走勢的一種最基本的圖形工具,K線分為陽線和陰線,陽線和陰線都包含了開盤價、收盤價、最高價和最低價,一般K線如下圖所示:

當收盤價大於開盤價時,稱為陽線,在圖形上一般用紅色表示,反之,當收盤價低於開盤價時,稱為陰線,在圖形上一般用綠色表示。由於其形狀頗似一根根蠟燭,K線圖有時也叫做蠟燭圖。

實例說明

對於某股票,仿真一段時間內每天的開盤價、收盤價、最高價和最低價數據,繪製其K線圖趨勢。其運行界面如下圖所示:

在上圖中,繪製了某股票7天的交易信息,通過該圖,可以清晰看到每天的開盤價、收盤價、最高價和最低價數據信息,通過顏色也可以看出開盤價及收盤價的大小關係。

編程思路

在pyqtgraph繪圖庫中,其內部實現方式上採用了Qt的圖形視圖框架結構,每個小部件都是一個繼承於QGraphicitem類的圖形項,因此,可以自定義一個顯示K線圖的小部件類CandlestickItem,在類中重新實現兩個方法函數「paint」和「boundingRect」即可。

K線圖部件CandlestickItem定製完成後,將其添加到主顯示窗口中,進而完整顯示股票的K線圖信息。

另外,其K線圖的橫坐標一般為時間,需要單獨自定義橫坐標的信息。

部件類CandlestickItem的實現

K線圖部件CandlestickItem類的實現代碼如下圖所示:

其主要代碼解釋如下:

(1)第18-21行,類的初始化代碼,傳入data參數,該參數包含了每天的股票數據,其類型為一列表,其每個元素為一元組,包含了股票的time、open、close、min、max等信息。

(2)第23-31行,生成K線圖的圖片picture,在初始化函數中調用一次。

(3)第33-34行,在paint函數中繪製K線圖圖片picture信息。

(4)第36-37行,在boundingRect函數中根據圖片picture的邊界大小定義該部件的大小信息。

完整的測試代碼

調用上面的部件類,完整測試代碼如下圖所示:

其主要代碼解釋如下:

(1)第15行,創建應用程式實例app。

(2)第39-47行,產生仿真的每日的股票數據,包括股票的time、open、close、min、max等信息。

(3)第48行,定義K線圖部件實例item。

(4)第50-52行,定義橫坐標軸實例myAxis,將坐標軸數值信息轉換為日期信息。

(5)第54-56行,創建一個圖形顯示窗口win,設置窗口標題、窗口大小等屬性。

(6)第58-62行,在win上添加一個畫圖對象p,設置坐標軸為myAxis,添加K線圖部件實例item,並設置X、Y軸標題、圖形標題等信息。

(7)第64行,使用app.exec_()函數運行實例,進入消息循環。

運行上面代碼後,就會出現本文開始的提到的運行界面圖。

總結

通過本例可以看出,在Python中使用pyqtgraph繪圖庫繪製股票K線圖,相對來說還是比較簡單的。通過本例可以學到的關於pyqtgraph繪圖庫編程的知識點包括:

(1)如何自定義繪圖部件。

(2)如何自定義坐標軸信息。

如果你覺得這篇文章對你有用的話,關注+收藏+點讚吧。

相關焦點

  • Python數據可視化之高速繪圖神器PyQtGraph庫,強烈建議收藏
    01為什麼使用PyQtGraph庫我們知道,在Python中,已經有了很多可供選擇的數據可視化庫。但是這些繪圖庫也存在著不足,即在圖形繪製速度上有所欠缺,特別是對於科研算法方面的數據可視化,很多情況需要實時繪圖,要求能夠提供儘可能快的繪製刷新速度,那這些庫顯的有些力不從心了。而我們下面要介紹的繪圖庫-PyQtGraph庫,則在繪圖速度方面表現尤其突出,在不失繪圖美觀、功能強大的前提下,在繪圖速度方面作了極大的優化,特別適合於實時數據採集的動態圖形繪製場合。
  • Python中使用pyqtgraph庫實現數據可視化之逐點刷新波形圖
    繪圖庫,相對於matplotlib庫,由於內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢在使用pyqtgraph庫繪製圖形的編程方法上,前面一篇文章已經給了一個最簡單的例子以及一個連續刷新波形圖的例子,下面再給一個逐點刷新波形圖的例子。
  • Python使用pyqtgraph庫實現數據可視化之多條曲線繪製方法
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於其在內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此它在大數據量的處理及快速顯示方面有著天然的優勢
  • Python語言使用pyqtgraph庫實現數據可視化之自定義坐標軸信息
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢
  • python可視化庫大全
    其它的可視化庫諸如:seaborn、pyecharts、ggplot、plotnine、holoviews、basemap、altair、pyqtgraph、pygal、vispy、networkx、plotly、bokeh、geoplotlib、folium、gleam、vincent、mpld3、python-igraph、missingno、mayavi2
  • ​數據可視化 | 6個基本可視化Python庫
    數據可視化是使用可視元素(例如圖表,圖形等)表示數據的過程,有助於從數據中獲取有意義的見解。它旨在揭示數據背後的信息,並進一步幫助查看者查看數據中的結構。數據可視化將使任何人只要對數據科學的了解最少,即可獲得科學發現,並幫助人們輕鬆地交流信息。畢竟,一張圖片勝過千言萬語。在本文中我們將介紹一些Python支持的最出色的可視化庫。
  • 【州末小課堂】使用PyQtGraph繪製上證指數精美走勢圖
    本篇,我們介紹使用PyQtGraph模塊繪製一個完整的折線圖,通過tushare模塊獲取上證指數過去兩個月的指數波動數據作為數據源。下面我們分步驟講解這個折線圖形的繪製。在本例中,我們需要使用到pyqtgraph模塊、numpy模塊和tushare模塊我們使用tushare模塊的get_hist_data()方法獲取上證指數從2017年10月到2017年12月的歷史行情數據:
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    同樣,作業系統環境是win7 64位,Python使用的版本是python2.7.14,函數約定的調用方式為C調用(cdecl)方式。在調用該函數時,先聲明兩個numpy庫中的數組t1、y1,數據類型為float64,將其作為參數傳遞到該函數中時,使用的是numpy中的ctypes.data_as(POINT(c_double))轉化為C語言中的指向double類型的指針類型,這樣就可以實現numpy中數組與C語言數組中的完美轉換。
  • Python 可視化神器--Plotly
    學習Python是做數分析的最基礎的一步,數據分析離不開數據可視化。Python第三方庫中我們最常用的可視化庫是 pandas,matplotlib,pyecharts,當然還有 Tableau,另外最近在學習過程中發現另一款可視化神器-Plotly,它是一款用來做數據分析和可視化的在線平臺,功能非常強大,可以在線繪製很多圖形比如條形圖、散點圖、餅圖、直方圖等等。
  • 推薦一些相見恨晚的 Python 庫 「二」
    因此對於開發者來講,從環境到使用會有各種坑需要踩。不過還好有 stackoverflow ,大部分問題都能查到。同時,借著這篇文章問下大家,若有對 RN 感興趣或者正在使用 RN 開發的同學,可以在公眾號後臺回復 RN 獲取到 微信群二維碼,我們一起交流前進。
  • Python數據可視化—Seaborn
    今天為大家分享的小技巧是python的可視化畫圖庫Seaborn。相信很多小俠客用過matplotlib、pyecharts等可視化庫,可是為什麼還要介紹Seaborn呢?因為它修復了上述兩個庫的一些缺點,比如Seaborn提供了大量的高級接口和自定義主題,而matplotlib沒有這些接口使得很難確定哪些設置來自定義圖表。
  • 使用Python和R繪製數據地圖的十七個經典案例
    在這篇博客中,我將一些優秀的用戶內核變成迷你教程,作為在Kaggle上發布的數據集進行繪製地圖的開始。 數據包下載連結:http://matplotlib.org/basemap/ 有很多用戶編寫的大內核,但Kaggler Dotman則顯示了使用底圖來很輕鬆地將紐約市近100萬Uber行程的數據可視化:
  • 每個python人都離不開的12個python庫
    Arrow我們都知道python中處理時間的庫有datetime,但是它過於簡單,使用起來不夠方便和智能,而Arrow可以說非常的方便和智能。它可以輕鬆地定位幾個小時之前的時間,可以輕鬆轉換時區時間,對於一個小時前,2個小時之內這樣人性化的信息也能夠準確解讀。
  • 十二、Python 第三方庫
    python-docx 是一個 處理 Microsoft Word 文檔的 Python 第三方庫,它支持讀取、查詢以及修改 doc、docx 等格式文件,並能夠對 Word 常見樣式進行編程設置,包括:字符樣式、段落樣式、表格樣式等,進一步可以使用這個庫實現添加和修改文本、圖像、樣式和文檔等功能。
  • Python的數據可視化:對比7種工具包
    在這篇文章中,我們將運用真實世界的數據,然後使用這些庫進行數據的可視化。當我們這樣做的時候,我們將發現,每個庫最適合用在哪裡,以及如何利用Python數據可視化系統最有效。探索數據集  在我們進行數據可視化之前,讓我們快速查看一下我們將要用到的數據集。我們將用到的據來自openflights。我們將用到 route,airport,和airline這三個數據。
  • Python數據可視化,完整版操作指南(建議收藏)
    讓我們看一下使用Python進行數據可視化的主要庫以及可以使用它們完成的所有類型的圖表。我們還將看到建議在每種情況下使用哪個庫以及每個庫的獨特功能。我們將從最基本的可視化開始,直接查看數據,然後繼續繪製圖表,最後製作交互式圖表。數據集我們將使用兩個數據集來適應本文中顯示的可視化效果,數據集可通過下方連結進行下載。
  • 【Python教程】用Python進行數據可視化
    在本文中,我將介紹如何開始使用Python和matplotlib、seaborn兩個庫對數據進行可視化。通過上面的例子,我們應該可以感受到利用可視化能多麼美麗的展示數據。而且和其它語言相比,使用 Python 進行可視化更容易簡便一些。
  • 數據統計可視化——python生成詞雲
    如何統計文章詞頻,從而更快了解一篇文章所獲得的中文詞頻統計數據進行詞雲可視化展示,更加清晰的看到文章關鍵詞的權重詞雲庫WordCloudwordcloud庫,可以說是python非常優秀的詞雲展示第三方庫。詞雲以詞語為基本單位更加直觀和藝術的展示文本而且使用簡單,內容豐富,先看看它生成的詞雲是什麼樣的。
  • Python的可視化工具概述
    >ggplotBokehpygalPlotly在例子用,我將使用pandas操作數據,並啟動其可視化.在大多數情況下使用這些工具不需要pandas,但是我覺得pandas+可視化工具如此普遍,這是最好的起點。
  • Python使用PyQt界面庫繪製不停旋轉的圓控制項
    Python是一種面向對象的高級動態程式語言,相對於其它如C/C++語言,具有上手快、代碼量少、開發效率高等特點,Qt是跨平臺的C++圖形用戶界面應用程式開發框架,是當前主流的GUI開發工具之一,其在Python下的綁定是PyQt庫。