python pandas 画图、显示中文、股票K线图

时间:2024-05-19 14:55:12

目录:

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')

python pandas 画图、显示中文、股票K线图

 

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()

python pandas 画图、显示中文、股票K线图

 

 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()