python pandas 畫圖、顯示中文、股票K線圖


目錄:

1、pandas官方畫圖鏈接

2、標記圖中數據點

3、畫圖顯示中文

4、畫股票K線圖

5、matplotlib基本用法

6、format輸出

 

 

6、format輸出例子

eps_range=[0.1,0.2,0.3]
#plt.legend(['eps =%0.1f' % eps for eps in eps_range],loc='lower right')
plt.legend(['eps ={:.1f}'.format(eps) for eps in eps_range],loc='lower right')

 

5、matplotlib基本用法

matplotlib中ion()和ioff()的使用

結論:python腳本文件中,matplotlib默認是阻塞模式,plt.plot(x) 或plt.imshow(x)是直接出圖像,需要plt.show()后才能顯示圖像。不用ion()和ioff(),麻煩 !!!

plt.cla()  #清除原有圖像

 

1、pandas官方畫圖鏈接

http://pandas.pydata.org/pandas-docs/stable/visualization.html                                                

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html?highlight=plot

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.plot.html?highlight=series

 

2、標記圖中數據點

 import matplotlib.pyplot as plt

import numpy as np

def demo_test():
a=np.array([0.15,0.16,0.14,0.17,0.12,0.16,0.1,0.08,0.05,0.07,0.06])
  #Series也有argmax屬性,直接Series.argmax()得到,新版本(0.20.0)
中argmax屬性修改為idxmax,argmin同。
    max_indx=np.argmax(a)#max value index
min_indx=np.argmin(a)#min value index
plt.plot(a,'r-o')
plt.plot(max_indx,a[max_indx],'ks')
show_max='['+str(max_indx)+' '+str(a[max_indx])+']'
plt.annotate(show_max,xytext=(max_indx,a[max_indx]),xy=(max_indx,a[max_indx]))
plt.plot(min_indx,a[min_indx],'gs')
plt.show()
demo_test()

 

 3、畫圖顯示中文

import matplotlib
#指定默認字體
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
#解決負號'-'顯示為方塊的問題
matplotlib.rcParams['axes.unicode_minus'] = False

 4、畫股票K線圖

#數據源:http://pan.baidu.com/s/1hs5Wn0w

  #要求:Matlibplot簡單應用
  #1.根據數據繪制出2017年6月~8月日線級別的價格走勢K線。
  #2.將MA5、MA10、MA20疊加至圖中
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
import datetime
from matplotlib.pylab import date2num

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#讀取數據並去掉多余數據
data=pd.read_csv('000001.SZ.csv',encoding='gbk',index_col=0).iloc[:-2,:4]
#將索引調整為datetime格式
data.index=pd.to_datetime(data.index)
#將分鍾數據聚合為日數據
data_open=data.loc[:,'開盤價(元)'].resample('D').first().dropna()
data_high=data.loc[:,'最高價(元)'].resample('D').max().dropna()
data_low=data.loc[:,'最低價(元)'].resample('D').min().dropna()
data_close=data.loc[:,'收盤價(元)'].resample('D').last().dropna()
#將開盤、收盤、最高、最低數據合並,注意數據順序,與candlestick_ochl一致
new_data=pd.concat([data_open,data_close,data_high,data_low],axis=1)
#new_data=new_data.ix['2017-06':'2017-08'];print(new_data)
#將日期索引調整到列
new_data=new_data.reset_index()
#將日期轉換為num格式
new_data['日期']=[int(date2num(new_data.ix[i,['日期']])) for i in range(len(new_data))]
quotes=np.array(new_data) 
fig,ax=plt.subplots(figsize=(8,5)) 
mpf.candlestick_ochl(ax,quotes,width=1,colorup='g',colordown='r') 
#分別畫出5日、10日、20日均線圖 
new_data.index=new_data['日期'] 
new_data['收盤價(元)'].rolling(window=5).mean().plot()
new_data['收盤價(元)'].rolling(window=10).mean().plot()
new_data['收盤價(元)'].rolling(window=20).mean().plot()
#將x軸設置為日期,調整x軸日期范圍 
ax.xaxis_date() 
ax.set_xlim(datetime.datetime(2017,6,1),datetime.datetime(2017,8,31)) plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM