#?-*-?coding:utf-8?-*-
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴展宣傳的重要窗口,一個合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:服務(wù)器租用等成都網(wǎng)站設(shè)計、成都全網(wǎng)營銷推廣解決方案、網(wǎng)站設(shè)計等建站排名服務(wù)。
import?numpy?as?np
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
from?matplotlib.dates?import?DateFormatter,?WeekdayLocator,?DayLocator,?MONDAY
from?matplotlib.finance?import?quotes_historical_yahoo_ohlc,?candlestick_ohlc
#從雅虎財經(jīng)獲取歷史行情
date1?=?(2017,?1,?1)
date2?=?(2017,?4,?30)
quotes?=?quotes_historical_yahoo_ohlc('600000.ss',?date1,?date2)
if?len(quotes)?==?0:
raise?SystemExit
#創(chuàng)建一個子圖
fig,?ax?=?plt.subplots()
fig.subplots_adjust(bottom=0.2)
#設(shè)置主要刻度和顯示格式
mondays?=?WeekdayLocator(MONDAY)
mondaysFormatter?=?DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_major_formatter(mondaysFormatter)
#設(shè)置次要刻度和顯示格式
alldays?=?DayLocator()
alldaysFormatter?=?DateFormatter('%d')
ax.xaxis.set_minor_locator(alldays)
#ax.xaxis.set_minor_formatter(alldaysFormatter)
#設(shè)置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()
不管是對量化分析師還是普通的投資者來說,K線圖(蠟燭圖)都是一種很經(jīng)典、很重要的工具。在K線圖中,它會繪制每天的最高價、最低價、開盤價和收盤價,這對于我們理解股票的趨勢以及每天的多空對比很有幫助。
一般來說,我們會從各大券商平臺獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調(diào)整,也不能適應(yīng)復(fù)雜多變的生產(chǎn)需求。因此我們有必要學(xué)習(xí)一下如何使用Python繪制K線圖。
需要說明的是,這里mpl_finance是原來的matplotlib.finance,但是現(xiàn)在獨立出來了(而且好像沒什么人維護更新了),我們將會使用它提供的方法來繪制K線圖;tushare是用來在線獲取股票數(shù)據(jù)的庫;matplotlib.ticker中有個FuncFormatter()方法可以幫助我們調(diào)整坐標軸;matplotlib.pylab.date2num可以幫助我們將日期數(shù)據(jù)進行必要的轉(zhuǎn)化。
我們以上證綜指18年9月份以來的行情為例。
我們先使用mpl_finance繪制一下,看看是否一切正常。
可以看到,所有的節(jié)假日包括周末,在這里都會顯示為空白,這對于我們圖形的連續(xù)性非常不友好,因此我們要解決掉他們。
可以看到,空白問題完美解決,這里我們解釋一下。由于matplotlib會將日期數(shù)據(jù)理解為 連續(xù)數(shù)據(jù) ,而連續(xù)數(shù)據(jù)之間的間距是有意義的,所以非交易日即使沒有數(shù)據(jù),在坐標軸上還是會體現(xiàn)出來。連續(xù)多少個非交易日,在坐標軸上就對應(yīng)了多少個小格子,但這些小格子上方并沒有相應(yīng)的蠟燭圖。
明白了它的原理,我們就可以對癥下藥了。我們可以給橫坐標(日期)傳入連續(xù)的、固定間距的數(shù)據(jù),先保證K線圖的繪制是連續(xù)的;然后生成一個保存有正確日期數(shù)據(jù)的列表,接下來,我們根據(jù)坐標軸上的數(shù)據(jù)去取對應(yīng)的正確的日期,并替換為坐標軸上的標簽即可。
上邊f(xié)ormat_date函數(shù)就是這個作用。由于前邊我們給dates列生成了從0開始的序列連續(xù)數(shù)據(jù),因此我們可以直接把它當(dāng)作索引,從真正的日期列表里去取對應(yīng)的數(shù)據(jù)。在這里我們要使用matplotlib.ticker.FuncFormattter()方法,它允許我們指定一個格式化坐標軸標簽的函數(shù),在這個函數(shù)里,我們需要接受坐標軸的值以及位置,并返回自定義的標簽。
你學(xué)會了嗎?
當(dāng)然,一個完整的K線圖到這里并沒有結(jié)束,后邊我們會考慮加入均線、成交量等元素,感興趣的同學(xué)歡迎關(guān)注哦!
import?matplotlib.pyplot?as?plt
from?matplotlib.dates?import?DateFormatter,?WeekdayLocator,?DayLocator,?MONDAY,YEARLY
from?matplotlib.finance?import?quotes_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)??#?結(jié)束日期,格式:(年,月,日)元組
mondays?=?WeekdayLocator(MONDAY)????????????#?主要刻度
alldays?=?DayLocator()??????????????????????#?次要刻度
#weekFormatter?=?DateFormatter('%b?%d')?????#?如:Jan?12
mondayFormatter?=?DateFormatter('%m-%d-%Y')?#?如:2-29-2015
dayFormatter?=?DateFormatter('%d')??????????#?如:12
quotes?=?quotes_historical_yahoo_ohlc(ticker,?date1,?date2)
if?len(quotes)?==?0:
raise?SystemExit
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()
使用matplotlib模塊,相關(guān)API請查看網(wǎng)頁鏈接
只要你是個圖,它就能給你畫出來。
希望可以幫到你
現(xiàn)在幾乎所有的大網(wǎng)站都在主要的欄目 做了防爬行的處理。 象這樣的還算是簡單的。 大不了你分析一下JS。 如果不想分析JS。就麻煩 些。 你安裝一個pyqt,里面有一個qtbrowser, 你可以驅(qū)動這個瀏覽器去爬行。要幾百行代碼才能搞定。怎么用Python畫5分鐘K線圖
在這里提了一個自問自答的問題來推廣一種十分優(yōu)雅的數(shù)據(jù)可視化工具,R的ggplot2包。其實我自己現(xiàn)在主要在使用Python和Pandas和Numpy工作,ggplot2應(yīng)該是我留守在R里面最大的理由之一~
在介紹ggplot2之前,我首先來介紹一下作者Hadley Wickham。Hadley (Rice University Department of Statistics : Faculty)
從統(tǒng)計學(xué)名校Iowa State University拿到了自己的Ph. D,其博士論文Practical tools for
exploring data and models 就是關(guān)于數(shù)據(jù)可視化和探索性數(shù)據(jù)分析的,現(xiàn)任Rice University的Adjunct
Assistant Professor 和R的著名IDE
RStudio的首席科學(xué)家。Hadley在R語言用戶中具有極高的聲望。R的基礎(chǔ)版本其實是不太好用的,但是Hadley的一系列優(yōu)秀作品極大地改進了
R語言。今年五月在北京召開的R語言會議,好多人都爭相和Hadley合影,可見Hadley的魅力與聲望非同一般。Hadley開發(fā)一個package
的時候會先開發(fā)一個版本,如果他覺得不夠好又升級了,就會發(fā)一個新版本,名字變成舊名字后面加上數(shù)字2。所以我們就有了reshape2和
ggplot2。
ggplot2基于Leland Wilkinson在Grammar of Graphics(圖形的語法)中提出的理論,取首字母縮寫再加上plot,于是得名ggplot。按照《圖形的語法》一書中的觀點,一張統(tǒng)計圖形就是從數(shù)據(jù)到點、線或方塊等幾何對象的顏色、形狀或大小等圖形屬性的一個映射,其中還可能包含對數(shù)據(jù)進行統(tǒng)計變換(如求均值或方差),最后將這個映射繪制在一定的坐標系中就得到了我們需要的圖形。圖中可能還有分面,
就是生成關(guān)于數(shù)據(jù)的不同子集的圖形。使用ggplot2繪圖的過程就是選擇合適的幾何對象、圖形屬性和統(tǒng)計變換來充分暴露數(shù)據(jù)中所含有的信息的過程。
ggplot2需要一定的時間去入門學(xué)習(xí),但是當(dāng)你掌握了ggplot2中圖形的語法的時候,我相信你會感受到這套語法的優(yōu)雅。
在接下來的部分,我假定讀者已經(jīng)對R語言有了基本的了解,我將不會介紹DataFrame等基本概念。
安裝ggplot2和安裝其他的R包沒有差別,在R的console里面運行install.packages("ggplot2") 一句就可以了,如果你使用RStudio,也可以在Package列表那里用鼠標去安裝。
先來介紹一些ggplot2中的基本概念,括號里面對應(yīng)的是ggplot2中為這種屬性賦值的時候需要使用的參數(shù)名
圖形屬性(aes) 橫縱坐標、點的大小、顏色,填充色等
幾何對象(geom_) 上面指定的圖形屬性需要呈現(xiàn)在一定的幾何對象上才能被我們看到,這些承載圖形屬性的對象可能是點,可能是線,可能是bar
統(tǒng)計變換 (stat_) 比如求均值,求方差等,當(dāng)我們需要展示出某個變量的某種統(tǒng)計特征的時候,需要用到統(tǒng)計變換