matplotlib畫折線圖
(一)matplotlib配置屬性
以一個例子開始:
假如我們想做一個上證50指數歷史最高價、收盤價走勢折線圖。
首先,需要取得構建圖像的數據,也就是獲得坐標軸的(x,y)。這里我們從Tushare獲取數據。
引入tushare模塊
import tushare as ts
#導入上證50指數數據
#兩個日期之間的前復權數據
data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
data = data.sort_index()
引入matplotlib模塊
import matplotlibimport matplotlib.pyplot as plt
#為了防止出現中文亂碼,在這里進行一下設置
font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
獲取橫縱坐標
from matplotlib.pylab import datestr2num
#使用matplotlib.pylab的datestr2num方法,將時間字符串轉換為數字(這里縱坐標想要傳入日期數據,同時我們也知道橫坐標需要傳入數字型數據,而我們獲取的數據日期格式為字符串)
#橫坐標
x_date = [datestr2num(i) for i in data.index]
#縱坐標
y_date_close = data['close']
y_date_high = data['high']
現在橫坐標已經有了,下面我們可以開始畫圖了,首先我們要有一張“畫布”,定義一個figure對象,即圖形對象。
plt.figure(figsize=(10,5))
畫折線
plt.plot_date(x_date,y_date_close,'-',label="closing price")
plt.plot_date(x_date,y_date_high,'-',label="peak price")
簡陋的折線圖
折線畫好了,為了使圖像更加直觀,需要加上圖示,標簽,標題等信息,以便觀看。
#定義圖像標題
plt.title("上證50指數歷史最高價、收盤價走勢折線圖",fontproperties=font,fontsize = 10)
#坐標軸標簽
plt.xlabel("時間",fontproperties=font)
plt.xticks(rotation=0) #可以使坐標刻度傾斜,這里傾斜0度
plt.ylabel("指數",fontproperties=font)
#加入圖示
plt.legend()
增加了信息后的折線圖.png
圖像做好了,但看著實在是。。。不忍直視!
接下來美化一下。
在這里,我們使用了plt.style.use來設置圖形的風格為ggplot。
matplotlib官方提供了五種不同的圖形風格,分別是:bmh、ggplot、dark_background、fivethirtyeight和grayscale。
#定義圖形風格
plt.style.use('ggplot')
# 添加圖表網格線
plt.grid(True)
美化后依然丑陋的圖像.png
為了便于觀看,修改了部分參數(將標題字體大小設置為50)
示例代碼:
import matplotlibimport matplotlib.pyplot as plt
from matplotlib.pylab import datestr2num
import tushare as ts
font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
data = data.sort_index()
x_date = [datestr2num(i) for i in data.index]
y_date_close = data['close']
y_date_high = data['high']
plt.style.use('ggplot')
plt.figure(figsize=(10,5))
plt.plot_date(x_date,y_date_close,'-',label="closing price")
plt.plot_date(x_date,y_date_high,'-',label="peak price")
plt.title("上證50指數歷史最高價、收盤價走勢折線圖",fontproperties=font,fontsize=50)
plt.xlabel("時間",fontproperties=font)
plt.xticks(rotation=0)
plt.ylabel("指數",fontproperties=font)
plt.legend()
plt.grid(True)
plt.show()
一定要加上plt.show(),否則無法顯示圖像!!!重要的事情說三遍!
圖像會畫了,來搞個稍微復雜點的圖吧!
(二)matplotlib
(三)matplotlib實踐
天天聽別人說低價股,甚至簡單的將三元以下的股票說成低價股,完全忽略股票的內在價值不談,雖然看著有點扯淡,但是不防拿來實踐一下,找出大盤股低于三元的股票分析一下。
import tushare as ts
# 獲取實時行情數據
hq = ts.get_today_all()
# 節選出股票代碼code、名稱name、漲跌幅changepercent、股價trade
hq = hq[['code','name','changepercent','trade']]
# 篩選出當前股價高于0元低于3元的股票信息
mins = hq.trade>0.00
maxs = hq.trade<=2.99
allselect = mins & maxs
#print(allselect)
data = hq[allselect].sort_values(by = 'trade')
#print(data)
code_list = []
for c in data.code:
if c[0] != "0":
code_list.append(c)
#print(code_list)
sh_hist_data = ts.get_hist_data(code='sh',start='2014-12-01',end='2016-12-01')
sh_hist_data = sh_hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
import matplotlib.pyplot as plt
from matplotlib.pylab import datestr2num
import matplotlib
# 設置中文字體
font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
dates = [datestr2num(i) for i in sh_hist_data.index]
plt.figure(figsize=(40,30))
# 新建一個子圖,繪制上證指數走勢
plt.subplot(311)
plt.title("2014年12月1日至2017年1月9日上證指數最低價走勢",fontproperties=font,fontsize=10)
plt.xticks(rotation=0,fontsize=10)
plt.yticks(fontsize=10)
plt.plot_date(dates,sh_hist_data.low,'-',linewidth=1.5)
plt.grid(True)
# 遍歷低價股代碼列表,繪制股價走勢
#由于折線太多,在這里分開遍歷。
for i in code_list[0:5]:
hist_data = ts.get_hist_data(code=i,start='2014-12-01',end='2017-1-09')
code_data = hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
dates = [datestr2num(t) for t in code_data.index]
plt.subplot(312)
plt.title("2014年12月1日至2017年1月9日各低價股最低價走勢",fontproperties=font,fontsize=10)
plt.xticks(rotation=0,fontsize=10)
plt.yticks(fontsize=10)
plt.plot_date(dates,code_data['low'],'-',linewidth=1.5,label=i)
plt.legend(loc=1,fontsize=10)
plt.grid(True)
for i in code_list[5:]:
hist_data = ts.get_hist_data(code=i,start='2014-12-01',end='2017-1-09')
code_data = hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
dates = [datestr2num(t) for t in code_data.index]
plt.subplot(313)
plt.title("2014年12月1日至2017年1月9日各低價股最低價價走勢",fontproperties=font,fontsize=10)
plt.xticks(rotation=0,fontsize=10)
plt.yticks(fontsize=10)
plt.plot_date(dates,code_data['low'],'-',linewidth=1.5,label=i)
plt.legend(loc=1,fontsize=10)
plt.grid(True)
plt.show()
對比圖.png
至此,我們得到了上證大盤和各低價股的走勢對比圖
料已備好。。。。。。可以發揮想象力了