A. 如何用python繪制簡單條形圖
如何用python繪制簡單條形圖呢?這里離不開matplotlib的使用。
條形圖是數據可視化圖形中很基礎也很常用的一種圖,簡單解釋下:條形圖也叫長條圖(英語:bar chart),亦稱條圖(英語:bar graph)、條狀圖、棒形圖、柱狀圖、條形圖表,是一種以長方形的長度為變數的統計圖表。長條圖用來比較兩個或以上的價值(不同時間或者不同條件),只有一個變數,通常利用於較小的數據集分析。長條圖亦可橫向排列,或用多維方式表達。
那麼一個普通的條形圖是長什麼樣子的呢?
當!當!當!就是下圖的這個樣子:
圖先亮出來啦,接下來研究這個圖是怎麼畫的吧,先看一下原數據長什麼樣子:
實際畫圖的流程和畫折線圖很相近,只是用到的畫圖函數不一樣,繪制條形圖的函數plt.bar():
由於這只是最簡單的一個條形圖,實際上條形圖的函數plt.bar()還有不少可以探索的參數設置,和對折線圖函數plt.plot()的探索差不多,有興趣的孩子可以自己去進行探索哦。
按照條形長短進行排序展示的條形圖
當然也可以有其他的設置,比如說上圖中的線條高低參差不齊,這是因為x軸的數據是按照學校名稱進行排序的,那麼可不可以按照分數的高低進行排序呢?也就是讓所有的長方形按照從高到矮或者從矮到高的順序進行排列?
當然可以啦!這里需要強調的是,條的高低排列等信息都是來源於原數據的,要想讓條形的順序發生改變,需要對畫圖的來源數據進行更改呢!
把原數據逆序排序後截取前十名數據賦值給data_yuwen,作為新的數據源傳入畫圖函數plt.bar(),畫出來的圖自然就不一樣了。
先看一眼數據長什麼樣子:
根據這個數據源繪制出的圖形如下,由於用來畫圖的數據進行了降序排序操作,所以生成條形圖的條也會進行降序排序展示:
很多時候,我們常見的條形圖還有另一種展現形式,那就是橫向的條形圖,比較火的那種動態條形圖絕大多數也都是橫向的條形圖,那麼橫向的條形圖如何繪制呢?
理解plt.bar()主要參數
其實也不難,只要清楚plt.bar()函數中主要參數的作用就可以了!條形圖函數中有五個主要參數,分別是x,height,width,bottom,orientation。其中x控制的是每個條在x軸上位置,height控制的是每個條的長度,width控制的是每個條的寬度,bottom控制的是每個條在y軸方向的起始位置,orientation控制的是條形的方向,是縱向還是橫向,默認是縱向的。
通過一個小例子理解下這幾個參數的作用:
上邊的幾行代碼輸出的圖形如下:
對比著代碼和實際輸出的條形圖,各個主要參數的作用是不是一目瞭然啦?
橫向條形圖
理解了這幾個參數作用後,縱向的條形圖轉換成橫向的條形圖就沒什麼難度了!
需要設置所有條形在x軸的位置都為0,也就全部從最左側開始畫條形;由於是橫向條形圖,所以實際上條的寬度顯示的是數據大小,將width參數設置成原數據中的語文成績;bottom控制每個條在y軸方向的起始位置,設置bottom=range(10)設置每個條形在y軸的起始位置各不相同避免有條形重疊;height控制的是每個條在y軸方向上的長度,條形圖橫向設置後,在y軸上的長度失去了衡量數據的意義,所以直接設置一個常數即可;最後設置條形的方向為橫向,即orientation=「horizontal」。
溫馨提示:數據和標簽一定要匹配,即plt.bar()重點的數據要和plt.yticks()中提取出來的標簽一一對應,一旦不匹配,整個圖展現的結果就是一個錯誤的結果!
上述代碼生成的條形圖如下:
感覺上邊這種生成橫向條形圖的方式有點點繞,和人們的習慣認知有點不大一樣,難道畫一個橫向條形圖就非得轉變自己的習慣認知這么反人類嗎?
當然不是的,實際上有更簡單的方法繪制一個橫向條形圖,之所以沒有一開始就直接用這種簡單的方法,也是為了讓大家體會下條形圖參數的靈活設置而已,而且如果比較繞的方法都能理解了,簡單的方法理解和運用起來就更沒有難度了啊!
不賣關子了,我們來認識下和plt.bar()函數類似的plt.barh()函數。
plt.barh()函數是專門繪制水平條形圖的函數,主要的參數有:
y 控制y軸顯示的標簽來源width 控制橫向條形的長度,即用來進行對比的數據源height 條形的寬度需要設置的參數主要就是這三個,比用plt.bar()函數繪制水平條形圖簡單了很多,具體代碼如下:
效果圖:
和用plt.bar()函數繪制的橫向條形圖一毛一樣對不對?以後有需求繪制橫向條形圖,盡量用plt.barh()函數吧,畢竟它是專門繪制這種類型圖的,簡單好用。
然而實際工作中對於條形圖的需求不只是這些,比如例子中只是對各個學校語文成績的展示,有時候需要各個學科的成績同時展現在一幅條形圖中,有時候也需要繪制堆積條形圖對各學科的成績以及總成績進行展示,這些圖又該如何繪制呢?其實只要理解了各個參數的含義,繪制這些圖也不在話下,至於具體怎麼畫,且看下回分解啊!
B. 怎麼利用python代碼繪制蠟燭線型k線圖
importmatplotlib.pyplotasplt
frommatplotlib.datesimportDateFormatter,WeekdayLocator,DayLocator,MONDAY,YEARLY
frommatplotlib.financeimportquotes_historical_yahoo_ohlc,candlestick_ohlc
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
ticker='600028'#600028是"中國石化"的股票代碼
ticker+='.ss'#.ss表示上證.sz表示深證
date1=(2015,8,1)#起始日期,格式:(年,月,日)元組
date2=(2016,1,1)#結束日期,格式:(年,月,日)元組
mondays=WeekdayLocator(MONDAY)#主要刻度
alldays=DayLocator()#次要刻度
#weekFormatter=DateFormatter('%b%d')#如:Jan12
mondayFormatter=DateFormatter('%m-%d-%Y')#如:2-29-2015
dayFormatter=DateFormatter('%d')#如:12
quotes=quotes_historical_yahoo_ohlc(ticker,date1,date2)
iflen(quotes)==0:
raiseSystemExit
fig,ax=plt.subplots()
fig.subplots_adjust(bottom=0.2)
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_minor_locator(alldays)
ax.xaxis.set_major_formatter(mondayFormatter)
#ax.xaxis.set_minor_formatter(dayFormatter)
#plot_day_summary(ax,quotes,ticksize=3)
candlestick_ohlc(ax,quotes,width=0.6,colorup='r',colordown='g')
ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(),rotation=45,horizontalalignment='right')
ax.grid(True)
plt.title('中國石化600028')
plt.show()
C. Python實操:手把手教你用Matplotlib把數據畫出來
作者:邁克爾·貝耶勒(Michael Beyeler)
如需轉載請聯系華章 科技
如果已安裝Anaconda Python版本,就已經安裝好了可以使用的 Matplotlib。否則,可能要訪問官網並從中獲取安裝說明:
http://matplotlib.org
正如使用np作為 NumPy 的縮寫,我們將使用一些標準的縮寫來表示 Matplotlib 的引入:
在本書中,plt介面會被頻繁使用。
讓我們創建第一個繪圖。
假設想要畫出正弦函數sin(x)的線性圖。得到函數在x坐標軸上0≤x<10內所有點的值。我們將使用 NumPy 中的 linspace 函數來在x坐標軸上創建一個從0到10的線性空間,以及100個采樣點:
可以使用 NumPy 中的sin函數得到所有x點的值,並通過調用plt中的plot函數把結果畫出來:
你親自嘗試了嗎?發生了什麼嗎?有沒有什麼東西出現?
實際情況是,取決於你在哪裡運行腳本,可能無法看到任何東西。有下面幾種可能性:
1. 從.py腳本中繪圖
如果從一個腳本中運行 Matplotlib,需要加上下面的這行調用:
在腳本末尾調用這個函數,你的繪圖就會出現!
2. 從 IPython shell 中繪圖
這實際上是互動式地執行Matplotlib最方便的方式。為了讓繪圖出現,需要在啟動 IPython 後使用所謂的%matplotlib魔法命令。
接下來,無須每次調用plt.show()函數,所有的繪圖將會自動出現。
3. 從 Jupyter Notebook 中繪圖
如果你是從基於瀏覽器的 Jupyter Notebook 中看這段代碼,需要使用同樣的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入圖形,這會有兩種輸出選項:
在本書中,將會使用inline選項:
現在再次嘗試一下:
上面的命令會得到下面的繪圖輸出結果:
如果想要把繪圖保存下來留作以後使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
僅需要確保你使用了支持的文件後綴,比如.jpg、.png、.tif、.svg、.eps或者.pdf。
作為本章最後一個測試,讓我們對外部數據集進行可視化,比如scikit-learn中的數字數據集。
為此,需要三個可視化工具:
那麼開始引入這些包吧:
第一步是載入實際數據:
如果沒記錯的話,digits應該有兩個不同的數據域:data域包含了真正的圖像數據,target域包含了圖像的標簽。相對於相信我們的記憶,我們還是應該對digits稍加 探索 。輸入它的名字,添加一個點號,然後按Tab鍵:digits.<TAB>,這個操作將向我們展示digits也包含了一些其他的域,比如一個名為images的域。images和data這兩個域,似乎簡單從形狀上就可以區分。
兩種情況中,第一維對應的都是數據集中的圖像數量。然而,data中所有像素都在一個大的向量中排列,而images保留了各個圖像8×8的空間排列。
因此,如果想要繪制出一副單獨的圖像,使用images將更加合適。首先,使用NumPy的數組切片從數據集中獲取一幅圖像:
這里是從1797個元素的數組中獲取了它的第一行數據,這行數據對應的是8×8=64個像素。下面就可以使用plt中的imshow函數來繪制這幅圖像:
上面的命令得到下面的輸出:
此外,這里也使用cmap參數指定了一個顏色映射。默認情況下,Matplotlib 使用MATLAB默認的顏色映射jet。然而,在灰度圖像的情況下,gray顏色映射更有效。
最後,可以使用plt的subplot函數繪制全部數字的樣例。subplot函數與MATLAB中的函數一樣,需要指定行數、列數以及當前的子繪圖索引(從1開始計算)。我們將使用for 循環在數據集中迭代出前十張圖像,每張圖像都分配到一個單獨的子繪圖中。
這會得到下面的輸出結果:
關於作者:Michael Beyeler,華盛頓大學神經工程和數據科學專業的博士後,主攻仿生視覺計算模型,用以為盲人植入人工視網膜(仿生眼睛),改善盲人的視覺體驗。 他的工作屬於神經科學、計算機工程、計算機視覺和機器學習的交叉領域。同時他也是多個開源項目的積極貢獻者。
本文摘編自《機器學習:使用OpenCV和Python進行智能圖像處理》,經出版方授權發布。
D. 怎麼用Python畫5分鍾K線圖
現在幾乎所有的大網站都在主要的欄目 做了防爬行的處理。 象這樣的還算是簡單的。 大不了你分析一下JS。 如果不想分析JS。就麻煩 些。 你安裝一個pyqt,裡面有一個qtbrowser, 你可以驅動這個瀏覽器去爬行。要幾百行代碼才能搞定。怎麼用Python畫5分鍾K線圖
E. 求教使用python繪制K線圖
使用matplotlib模塊,相關API請查看網頁鏈接
只要你是個圖,它就能給你畫出來。
希望可以幫到你
F. python可視化神器——pyecharts庫
無意中從今日頭條中看到的一篇文章,可以生成簡單的圖表。據說一些大數據開發們也是經常用類似的圖表庫,畢竟有現成的,改造下就行,誰會去自己造輪子呢。
pyecharts是什麼?
pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是網路開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒, pyecharts 是為了與 Python 進行對接,方便在 Python 中直接使用數據生成圖 。使用pyecharts可以生成獨立的網頁,也可以在flask、django中集成使用。
安裝很簡單:pip install pyecharts
如需使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可,同時兼容 Python2 和 Python3 的 Jupyter Notebook 環境。所有圖表均可正常顯示,與瀏覽器一致的交互體驗,簡直不要太強大。
參考自pyecharts官方文檔: http://pyecharts.org
首先開始來繪制你的第一個圖表
使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可
add() 主要方法,用於添加圖表的數據和設置各種配置項
render() 默認將會在根目錄下生成一個 render.html 的文件,文件用瀏覽器打開。
使用主題
自 0.5.2+ 起,pyecharts 支持更換主體色系
使用 pyecharts-snapshot 插件
如果想直接將圖片保存為 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用該插件請確保你的系統上已經安裝了 Nodejs 環境。
安裝 phantomjs $ npm install -g phantomjs-prebuilt
安裝 pyecharts-snapshot $ pip install pyecharts-snapshot
調用 render 方法 bar.render(path='snapshot.png') 文件結尾可以為 svg/jpeg/png/pdf/gif。請注意,svg 文件需要你在初始化 bar 的時候設置 renderer='svg'。
圖形繪制過程
基本上所有的圖表類型都是這樣繪制的:
chart_name = Type() 初始化具體類型圖表。
add() 添加數據及配置項。
render() 生成本地文件(html/svg/jpeg/png/pdf/gif)。
add() 數據一般為兩個列表(長度一致)。如果你的數據是字典或者是帶元組的字典。可利用 cast() 方法轉換。
多次顯示圖表
從 v0.4.0+ 開始,pyecharts 重構了渲染的內部邏輯,改善效率。推薦使用以下方式顯示多個圖表。如果使是 Numpy 或者 Pandas,可以參考這個示例
當然你也可以採用更加酷炫的方式,使用 Jupyter Notebook 來展示圖表,matplotlib 有的,pyecharts 也會有的
Note: 從 v0.1.9.2 版本開始,廢棄 render_notebook() 方法,現已採用更加 pythonic 的做法。直接調用本身實例就可以了。
比如這樣
還有這樣
如果使用的是自定義類,直接調用自定義類示例即可
圖表配置
圖形初始化
通用配置項
xyAxis:平面直角坐標系中的 x、y 軸。(Line、Bar、Scatter、EffectScatter、Kline)
dataZoom:dataZoom 組件 用於區域縮放,從而能自由關注細節的數據信息,或者概覽數據整體,或者去除離群點的影響。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)
legend:圖例組件。圖例組件展現了不同系列的標記(symbol),顏色和名字。可以通過點擊圖例控制哪些系列不顯示。
label:圖形上的文本標簽,可用於說明圖形的一些數據信息,比如值,名稱等。
lineStyle:帶線圖形的線的風格選項(Line、Polar、Radar、Graph、Parallel)
grid3D:3D笛卡爾坐標系組配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)
axis3D:3D 笛卡爾坐標系 X,Y,Z 軸配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)
visualMap:是視覺映射組件,用於進行『視覺編碼』,也就是將數據映射到視覺元素(視覺通道)
markLine&markPoint:圖形標記組件,用於標記指定的特殊數據,有標記線和標記點兩種。(Bar、Line、Kline)
tooltip:提示框組件,用於移動或點擊滑鼠時彈出數據內容
toolbox:右側實用工具箱
圖表詳細
Bar(柱狀圖/條形圖)
Bar3D(3D 柱狀圖)
Boxplot(箱形圖)
EffectScatter(帶有漣漪特效動畫的散點圖)
Funnel(漏斗圖)
Gauge(儀表盤)
Geo(地理坐標系)
GeoLines(地理坐標系線圖)
Graph(關系圖)
HeatMap(熱力圖)
Kline/Candlestick(K線圖)
Line(折線/面積圖)
Line3D(3D 折線圖)
Liquid(水球圖)
Map(地圖)
Parallel(平行坐標系)
Pie(餅圖)
Polar(極坐標系)
Radar(雷達圖)
Sankey(桑基圖)
Scatter(散點圖)
Scatter3D(3D 散點圖)
ThemeRiver(主題河流圖)
TreeMap(矩形樹圖)
WordCloud(詞雲圖)
用戶自定義
Grid 類:並行顯示多張圖
Overlap 類:結合不同類型圖表疊加畫在同張圖上
Page 類:同一網頁按順序展示多圖
Timeline 類:提供時間線輪播多張圖
統一風格
註:pyecharts v0.3.2以後,pyecharts 將不再自帶地圖 js 文件。如用戶需要用到地圖圖表,可自行安裝對應的地圖文件包。
地圖文件被分成了三個 Python 包,分別為:
全球國家地圖:
echarts-countries-pypkg
中國省級地圖:
echarts-china-provinces-pypkg
中國市級地圖:
echarts-china-cities-pypkg
直接使用python的pip安裝
但是這里大家一定要注意,安裝完地圖包以後一定要重啟jupyter notebook,不然是無法顯示地圖的。
顯示如下:
總得來說,這是一個非常強大的可視化庫,既可以集成在flask、Django開發中,也可以在做數據分析的時候單獨使用,實在是居家旅行的必備神器啊
G. 如何用python做k線形態識別
K線形態識別是比較難的一個點,難在思路上,代碼都是其次。分享一下我的思路吧,通過api獲取了行情信息之後(一般都是pandas.DataFrame格式,基本上都包含ohlc和volume),那麼假如我需要識別十字星,那麼用df['open']==df['close']把其布爾值賦值給a, 然後df['high']>df['open']>df['low']賦值給b。然後
for i in range(len(df)):
df['outcome']=np.where(a+b==1, 1, 0)
df[df['outcome']==1]
這樣就能把所有的十字星給選出來了。
H. 用c++畫k線圖,有什麼比較好的解決方案
這個問題我試圖解決過,結論先說一下:不建議用C++畫
先不說像R,Python這種專門處理數據的語言三行代碼就畫完了,就算你用C++出來了,就完了嘛?你不需要分析?不需要增加標記?不需要其他指標?不需要對比?不需要方便的載入和導出?
然而這在那兩種語言里也就是增加一個參數,或者多謝一兩行代碼的事。
而你要做同樣的事難道你不需要一大堆類互相配合?你的類合理嘛?沒有BUG嘛?你最終絞盡腦汁搞出來的東西,發現起到了一點點的分析決策的作用,而實際上人家用其他的語言現學現賣早就知道結果了。
舉個例子不太聽,用C++我也見過人家做出來的,或者說通達信這種PC端應該都是C++做的。
但是人家是產品啊,值得這么投入啊。
你用C++如果不是做產品,我建議你先用匯編做,惡心一下自己,或許你就不再會問這個問題了。
I. python用matplotlib畫K線
#-*-coding:utf-8-*-
importnumpyasnp
importpandasaspd
importmatplotlib.pyplotasplt
frommatplotlib.datesimportDateFormatter,WeekdayLocator,DayLocator,MONDAY
frommatplotlib.financeimportquotes_historical_yahoo_ohlc,candlestick_ohlc
#從雅虎財經獲取歷史行情
date1=(2017,1,1)
date2=(2017,4,30)
quotes=quotes_historical_yahoo_ohlc('600000.ss',date1,date2)
iflen(quotes)==0:
raiseSystemExit
#創建一個子圖
fig,ax=plt.subplots()
fig.subplots_adjust(bottom=0.2)
#設置主要刻度和顯示格式
mondays=WeekdayLocator(MONDAY)
mondaysFormatter=DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_major_formatter(mondaysFormatter)
#設置次要刻度和顯示格式
alldays=DayLocator()
alldaysFormatter=DateFormatter('%d')
ax.xaxis.set_minor_locator(alldays)
#ax.xaxis.set_minor_formatter(alldaysFormatter)
#設置x軸為日期
ax.xaxis_date()
ax.autoscale_view()
#X軸刻度文字傾斜45度
plt.setp(plt.gca().get_xticklabels(),rotation=45,horizontalalignment='right')
candlestick_ohlc(ax,quotes,width=0.6,colorup='r',colordown='g')
ax.grid(True)
plt.title('600000')
plt.show()
J. Python量化教程:不得不學的K線圖「代碼復制可用」
不管是對量化分析師還是普通的投資者來說,K線圖(蠟燭圖)都是一種很經典、很重要的工具。在K線圖中,它會繪制每天的最高價、最低價、開盤價和收盤價,這對於我們理解股票的趨勢以及每天的多空對比很有幫助。
一般來說,我們會從各大券商平台獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調整,也不能適應復雜多變的生產需求。因此我們有必要學習一下如何使用Python繪制K線圖。
需要說明的是,這里mpl_finance是原來的matplotlib.finance,但是現在獨立出來了(而且好像沒什麼人維護更新了),我們將會使用它提供的方法來繪制K線圖;tushare是用來在線獲取股票數據的庫;matplotlib.ticker中有個FuncFormatter()方法可以幫助我們調整坐標軸;matplotlib.pylab.date2num可以幫助我們將日期數據進行必要的轉化。
我們以上證綜指18年9月份以來的行情為例。
我們先使用mpl_finance繪制一下,看看是否一切正常。
可以看到,所有的節假日包括周末,在這里都會顯示為空白,這對於我們圖形的連續性非常不友好,因此我們要解決掉他們。
可以看到,空白問題完美解決,這里我們解釋一下。由於matplotlib會將日期數據理解為 連續數據 ,而連續數據之間的間距是有意義的,所以非交易日即使沒有數據,在坐標軸上還是會體現出來。連續多少個非交易日,在坐標軸上就對應了多少個小格子,但這些小格子上方並沒有相應的蠟燭圖。
明白了它的原理,我們就可以對症下葯了。我們可以給橫坐標(日期)傳入連續的、固定間距的數據,先保證K線圖的繪制是連續的;然後生成一個保存有正確日期數據的列表,接下來,我們根據坐標軸上的數據去取對應的正確的日期,並替換為坐標軸上的標簽即可。
上邊format_date函數就是這個作用。由於前邊我們給dates列生成了從0開始的序列連續數據,因此我們可以直接把它當作索引,從真正的日期列表裡去取對應的數據。在這里我們要使用matplotlib.ticker.FuncFormattter()方法,它允許我們指定一個格式化坐標軸標簽的函數,在這個函數里,我們需要接受坐標軸的值以及位置,並返回自定義的標簽。
你學會了嗎?
當然,一個完整的K線圖到這里並沒有結束,後邊我們會考慮加入均線、成交量等元素,感興趣的同學歡迎關注哦!