赞
踩
目录
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- %matplotlib inline
- # 1. 绘制多项式函数
- # 以自然数序列作为多项式的系数,使用poly1d函数创建多项式
- func = np.poly1d(np.array([1,2,3,4]).astype(float))
- x = np.linspace(-10,10,30)
- y = func(x)
-
- plt.plot(x,y)
- plt.xlabel('x')
- plt.ylabel('y')
- # 2. 绘制多项式函数及其导函数
- func = np.poly1d(np.array([1,2,3,4]).astype(float))
- func1 = func.deriv(m=1)
- x = np.linspace(-10,10,30)
- y = func(x)
- y1 = func1(x)
- plt.plot(x,y,'ro',x,y1,'g--')
- plt.xlabel('x')
- plt.ylabel('y')
- func2 = func.deriv(m=2)
- y2 = func2(x)
- '''
- 使用subplot函数创建子图。该函数第一个参数是子图的行数,第二个参数是子图的列数,第三个参数是一个从1开始的序号。另一种方式是将这
- 3个参数结合成一个数字,如311
- '''
- plt.subplot(311)
- plt.plot(x,y,'r-')
- plt.title('Polynomial')
- plt.subplot(312)
- plt.plot(x,y1,'b^')
- plt.title('First Drivative')
- plt.subplot(313)
- plt.plot(x,y2,'go')
- plt.title('Second Drivative')
- plt.xlabel('x')
- plt.ylabel('y')
- # 3. 直方图
- df = pd.read_csv('AAPL.csv',encoding='utf-8')
- df = df.iloc[-252:]
- close_s = np.array(df['Close'])
- plt.hist(close_s,int(np.sqrt(len(close_s))))
- # 4. 对数坐标图
- '''
- 当数据的变化范围很大时,对数坐标图很有用
- Matplotlib中有 semilogx对x轴取对数,semilogy对y轴取对数、loglog同时对x轴和y轴取对数
- '''
- volume = df['Volume']
- plt.subplot(211)
- plt.plot(volume)
- plt.title('Normal Volume')
- plt.subplot(212)
- plt.semilogy(volume)
- plt.title('Log Volume')
- plt.subplots_adjust(wspace=0.5,hspace=0.5)
- # 5. 散点图
- # 绘制股票收益率和成交量变化散点图
- df = pd.read_csv('AAPL.csv',encoding='utf-8')
- df['ret'] = (df['Close']-df['Close'].shift(1))/df['Close'].shift(1)
- df['volchange'] = (df['Volume']-df['Volume'].shift(1))/df['Volume'].shift(1)
- df = df.iloc[-252:]
- fig = plt.figure()
- ax = fig.add_subplot(111)
- ax.scatter(df['ret'],df['volchange'],c=df['ret']*100,s=df['volchange']*100,alpha=0.5)
- ax.set_title('Close and volume returns')
- ax.grid(True)
- # 6. 着色
- '''
- 题目:对股票曲线图进行着色,并将低于均值和高于均值的收盘价填充为不同颜色。
- '''
- fig = plt.figure()
- ax = fig.add_subplot(111)
- x = range(len(df))
- ax.plot(x,df['Close'])
- plt.fill_between(x,df['Close'].min(),df['Close'],where=df['Close']>df['Close'].mean(),facecolor='green',alpha=0.4)
- plt.fill_between(x,df['Close'].min(),df['Close'],where=df['Close']<df['Close'].mean(),facecolor='red',alpha=0.4)
- # 7. 图例和注释
- # 计算并绘制指数移动平均线
- # 分别使用 9 12 15 作为周期数计算和绘制指数移动平均线
- df = df.iloc[-100:]
- fig = plt.figure()
- ax = fig.add_subplot(111)
- df['count'] = range(len(df))
- x = df['count']
- close = df['Close']
- emas= []
- for i in range(9,18,3):
- weights = np.exp(np.linspace(-1.,0.,i))
- weights /= weights.sum()
- ema = np.convolve(weights,close)[i-1:-i+1]
- idx = (i-6)/3
- ax.plot(x[i-1:],ema,lw=idx,label='EMA(%s)'%(i))
- data = np.column_stack((x[i-1:],ema))
- emas.append(np.rec.fromrecords(data,names=['dates','ema']))
- first = emas[0]['ema'].flatten()
- second = emas[1]['ema'].flatten()
- bools = np.abs(first[-len(second):]-second)/second<0.0001
- xpoints = np.compress(bools,emas[1])
- for xpoint in xpoints:
- ax.annotate('x',xy=xpoint,textcoords='offset points',xytext=(-50,30),arrowprops=dict(arrowstyle='->'))
- leg = ax.legend(loc='best',fancybox=True)
- leg.get_frame().set_alpha(0.5)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。