0、Matplotlib -- 简介.note
官网:http://matplotlib.org/
1、Matplotlib -- 绘制多项式函数.note
#-*- coding:utf-8 -*- #绘制多项式函数 import numpy as np import matplotlib.pyplot as plt #以自然数序列作为多项式的系数,使用polyld函数创建多项式 func = np.poly1d(np.array([1,2,3,4]).astype(float)) print func #使用Numpy的linspace函数创建X轴的数值,在-10和10之间产生30个均匀分布的值 x=np.linspace(-10,10,30) #计算我们在第一步中创建的多项式的值 y=func(x) #调用plot函数,这并不会立即显示函数图像 plt.plot(x,y) #使用xlabel函数添加X轴的标签 plt.xlabel('x') #使用ylabel函数添加y轴的标签 plt.ylabel('y(x)') #调用show函数显示函数图像 plt.show()
2、Matplotlib -- 绘制多项式函数及其导函数.note
#-*- coding:utf-8 -*- #绘制多项式函数及其导函数 #使用两种不同风格的曲线绘制了一个多项式函数以及导函数,并只调用一次plot函数 import numpy as np import matplotlib.pyplot as plt #绘制一个多项式,以及使用derive函数和参数m为1得到的其一阶导函数 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) #多项式函数 plt.plot(x,y,'ro',x,y1,'g--') #多项式函数和一阶导函数 红色是导函数、绿色是一阶导函数 plt.xlabel('x') plt.ylabel('y') plt.show()
3、Matplotlib -- 绘制多项式函数及其导函数、一阶导和二阶导.note
# -*- coding:utf-8 -*- #绘制多项式函数及其导函数、一阶导和二阶导 import numpy as np import matplotlib.pyplot as plt #创建多项式及其导函数 func=np.poly1d(np.array([1,2,3,4]).astype(float)) x=np.linspace(-10,10,30) y=func(x) func1=func.deriv(m=1) y1=func1(x) func2=func.deriv(m=2) y2=func2(x) #使用subplot函数创建第一个子图。 # 函数的第一个参数是:子图的行数 # 函数的第二个参数是:子图的列数 # 函数的第三个参数是:从1开始的序号 plt.subplot(311) plt.plot(x,y,'r-') plt.title("Ploynomial") #使用subplot函数创建第二个子图,使用蓝色三角形绘制 plt.subplot(312) plt.plot(x,y1,'b^') plt.title("First Derivative") #使用subplot函数绘制第三个子图,使用绿色圆形绘制 plt.subplot(313) plt.plot(x,y2,'go') plt.title("Secord Derivaive") plt.xlabel('x') plt.ylabel('y') plt.show()
4、Matplotlib -- 绘制全年的股票价格.note
# -*- coding:utf-8 -*- #绘制全年的股票价格 from matplotlib.dates import DateFormatter from matplotlib.dates import DayLocator from matplotlib.dates import MonthLocator from matplotlib.finance import quotes_historical_yahoo from matplotlib.finance import candlestick import sys from datetime import date import matplotlib.pyplot as plt today=date.today() start=(today.year-1,today.month,today.day) #将当前的日期减去1年作为起始日期 #定时器locator,可以在X轴上面定位月份和日期 alldays=DayLocator() months=MonthLocator() #创建一个日期格式化data formatter,以格式化X轴上的日期。该格式化将创建一个字符串,包含简写的月份和年份 month_formatter=DateFormatter("%b %Y") symbol = 'DISH' #Dish Network公司,Dish股价 if len(sys.argv) == 2: symbol=sys.argv[1] #从雅虎财经频道下载股价数据 quotes=quotes_historical_yahoo(symbol,start,today) print quotes #创建一个Matplotlib的figure对象,这是绘图组件的顶层容器 fig=plt.figure() #增加一个子图 ax=fig.add_subplot(111) #将X轴上的主定位器设置为日定位器。该定位器负责X轴上较粗的刻度 ax.xaxis.set_major_locator(months) #将X轴上的次定位器设置为日定位器。该定位器负责X轴上较细的刻度 ax.xaxis.set_minor_locator(alldays) #将X轴上的主格式化器设置为月格式化器,该格式化器负责X轴上较粗刻度的标签 ax.xaxis.set_major_formatter(month_formatter) #使用获取肚饿股价数据绘制K线图。我们可以指定K线图的宽度 candlestick(ax, quotes) #将X轴上的标签格式化为日期。为了更好的适应X轴的长度,标签将被旋转 fig.autofmt_xdate() plt.show()
5、Matplotlib -- 绘制股票分布直方图.note
# -*- coding:utf-8 -*- #绘制股票分布直方图 #直方图可以将数据的分布可视化 #绘制DISH股价的分布直方图 from matplotlib.finance import quotes_historical_yahoo import sys from datetime import date import matplotlib.pyplot as plt import numpy as np #下载一年以来的数据 today=date.today() start=(today.year-1,today.month,today.day) symbol='DISH' if len(sys.argv)==2: symbol=sys.argv[1] quotes=quotes_historical_yahoo(symbol,start,today) #上一步得到的股价数据存储在python列表中,将其转化为Numpy数组并提取出收盘价数据 quotes=np.array(quotes) close=quotes.T[4] #指定合理数量的柱形,绘制分布直方图 plt.hist(close,np.sqrt(len(close))) plt.show()
6、Matplotlib -- 对数坐标轴 绘制股票成交量.note
# -*- coding:utf-8 -*- #对数坐标轴 绘制股票成交量 from matplotlib.dates import DateFormatter from matplotlib.dates import DayLocator from matplotlib.dates import MonthLocator from matplotlib.finance import quotes_historical_yahoo import sys from datetime import date import matplotlib.pyplot as plt import numpy as np today=date.today() start=(today.year-1,today.month,today.day) #将当前的日期减去1年作为起始日期 symbol = 'DISH' #Dish Network公司,Dish股价 if len(sys.argv) == 2: symbol=sys.argv[1] #从雅虎财经频道下载股价数据 quotes=quotes_historical_yahoo(symbol,start,today) print quotes quotes=np.array(quotes) dates=quotes.T[0] volume=quotes.T[5] alldays=DayLocator() months=MonthLocator() month_formatter=DateFormatter("%b %Y") #创建一个Matplotlib的figure对象,这是绘图组件的顶层容器 fig=plt.figure() #增加一个子图 ax=fig.add_subplot(111) #使用对数坐标 plt.semilogy(dates,volume) #将X轴上的主定位器设置为日定位器。该定位器负责X轴上较粗的刻度 ax.xaxis.set_major_locator(months) #将X轴上的次定位器设置为日定位器。该定位器负责X轴上较细的刻度 ax.xaxis.set_minor_locator(alldays) #将X轴上的主格式化器设置为月格式化器,该格式化器负责X轴上较粗刻度的标签 ax.xaxis.set_major_formatter(month_formatter) #将X轴上的标签格式化为日期。为了更好的适应X轴的长度,标签将被旋转 fig.autofmt_xdate() plt.show()
7、Matplotlib -- 散点图 绘制DISH的股票收益率和成交量的散点图.note
# -*- coding:utf-8 -*- #散点图 绘制DISH的股票收益率和成交量的散点图 from matplotlib.finance import quotes_historical_yahoo import sys from datetime import date import matplotlib.pyplot as plt import numpy as np today=date.today() start=(today.year-1,today.month,today.day) symbol='DISH' if len(sys.argv)==2: symbol=sys.argv[1] #从雅虎财经频道下载股价数据 quotes=quotes_historical_yahoo(symbol,start,today) #没有网,这个代码跑不了 print quotes #得到的quotes数据存储在Python列表中,将其格式化为Numpy数组并提取出收盘价和成交量数据 quotes=np.array(quotes) close=quotes.T[4] volume=quotes.T[5] #计算股票收益率和成交量的变化值 ret=np.diff(close)/close[:-1] volchange=np.diff(volume)/volume[:-1] #创建一个Matplotlib的figure对象 fig=plt.figure() #在图像中绘制一个子图 ax=fig.add_subplot(111) #创建散点图,并使数据点的颜色与股票收益率相关联,数据点的大小与成交量的变化相关联 ax.scatter(ret,volchange,c=ret*100,s=volchange*100,alpha=0.5) #设置图像的标题,并添加网格线 ax.set_title('Close and volume returns') ax.grid(True) plt.show()
8、Matplotlib -- 根据条件进行着色.note
# -*- coding:utf-8 -*- #根据条件进行着色 #fill_between函数使用指定的颜色填充图像中的区域 #对股票曲线图进行着色,并将低于均值和高于均值的收盘价填充为不同颜色 from matplotlib.finance import quotes_historical_yahoo from matplotlib.dates import DateFormatter from matplotlib.dates import DayLocator from matplotlib.dates import MonthLocator import sys from datetime import date import matplotlib.pyplot as plt import numpy as np today=date.today() start=(today.year-1,today.month,today.day) symbol='DISH' if len(sys.argv)==2: symbol=sys.argv[1] quotes=quotes_historical_yahoo(symbol,start,today) quotes=np.array(quotes) dates=quotes.T[0] close=quotes.T[4] alldays=DayLocator() months=MonthLocator() month_formatter=DateFormatter("%b %Y") #创建一个Matplotlib的figure对象 fig=plt.figure() #在图像中添加一个子图 ax=fig.add_subplot(111) #绘制收盘价数据 ax.plot(dates,close) #对收盘价下方的数据进行着色,低于或者高于平均收盘价使用不同的颜色填充 plt.fill_between(dates,close.min(),close,where=close>close.mean(),facecolor="green",alpha=0.4) plt.fill_between(dates,close.min(),close,where=close<close.mean(),facecolor="red",alpha=0.4) #设置定位器并将X轴格式化为日期 ax.xaxis.set_major_locator(months) ax.xaxis.set_minor_locator(alldays) ax.xaxis.set_major_formatter(month_formatter) ax.grid(True) fig.autofmt_xdate() plt.show()
9、Matplotlib -- 使用图例和注释.note
# -*- coding:utf-8 -*- #使用图例和注释 #用legend函数创建透明图例,并由Matplotlib自动确定其摆放位置。同时还可以用annotate函数在图像上精确添加注释, #并有很多可选的注释和箭头风格 from matplotlib.finance import quotes_historical_yahoo from matplotlib.dates import DateFormatter from matplotlib.dates import DayLocator from matplotlib.dates import MonthLocator import sys from datetime import date import matplotlib.pyplot as plt import numpy as np today=date.today() start=(today.year-1,today.month,today.day) symbol='DISH' if len(sys.argv)==2: symbol=sys.argv[1] quotes=quotes_historical_yahoo(symbol,start,today) quotes=np.array(quotes) dates=quotes.T[0] close=quotes.T[4] fig=plt.figure() ax=fig.add_subplot(111) #计算并绘制指数移动平均线 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(dates[i-1:],ema,lw=idx,label="EMA(%s)" % (i)) date=np.column_stack((dates[i-1:],ema)) emas.append(np.rec.fromrecords(date,names=["datas","ema"])) #找到两条指数移动平均曲线的交点 first=emas[0]["ema"].flatten() secord=emas[1]["ema"].flatten() bools=np.abs(first[-len(secord):]-secord)/secord<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="->")) #添加一个图例并由Matplotlib自动确定其摆放位置 leg=ax.legend(loc='best',fancybox=True) #设置alpha通道值,将图例透明化 leg.get_frame().set_alpha(0.5) alldays=DayLocator() months=MonthLocator() month_formatter=DateFormatter("%b %Y") #绘制收盘价数据 ax.plot(dates,close,lw=1.0,label="Close") #对收盘价下方的数据进行着色,低于或者高于平均收盘价使用不同的颜色填充 plt.fill_between(dates,close.min(),close,where=close>close.mean(),facecolor="green",alpha=0.4) plt.fill_between(dates,close.min(),close,where=close<close.mean(),facecolor="red",alpha=0.4) #设置定位器并将X轴格式化为日期 ax.xaxis.set_major_locator(months) ax.xaxis.set_minor_locator(alldays) ax.xaxis.set_major_formatter(month_formatter) ax.grid(True) fig.autofmt_xdate() plt.show()
10、Matplotlib -- 在3维空间中绘图.note
# -*- coding:utf-8 -*- #在3维空间中绘图 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np from matplotlib import cm fig=plt.figure() #使用3d关键字来指定图像的三维投影 ax=fig.add_subplot(111,projection='3d') #使用meshgrid函数创建一个二维的坐标网格 u=np.linspace(-1,1,100) x,y=np.meshgrid(u,u) z=x**2+y**2 #指定行和列的步幅,以及绘制曲面所用的色彩表 ax.plot_surface(x,y,z,rstride=4,cstride=4,cmap=cm.YlGnBu_r) plt.show()
11、Matplotlib -- 绘制等高图.note
# -*- coding:utf-8 -*- #绘制等高图 #Matplotlib中的等高线3D绘图有两种风格:填充和非填充的。 #我们可以使用contour函数创建一般的等高线图,对于色彩填充的等高线图,可以使用contourf import matplotlib.pyplot as plt import numpy as np from matplotlib import cm fig=plt.figure() ax=fig.add_subplot(111) u=np.linspace(-1,1,100) x,y=np.meshgrid(u,u) z=x**2+y**2 #绘制等高线图 ax.contourf(x,y,z) plt.show()
12、Matplotlib -- 制作动画.note
# -*- coding:utf-8 -*- #制作动画 #绘制3个随机生成的数据集,分别用圆形、小圆点和三角形来显示 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig=plt.figure() ax=fig.add_subplot(111) N=10 x=np.random.rand(N) y=np.random.rand(N) z=np.random.rand(N) #用不同颜色的圆形、小圆点和三角形绘制三个数据集中的数据点 circles,triangles,dots=ax.plot(x,'ro',y,'g^',z,'b.') ax.set_ylim(0,1) plt.axis('off') #这个函数将被定期调用以更新屏幕的内容 def update(data): circles.set_ydata(data[0]) triangles.set_ydata(data[1]) return circles,triangles #使用Numpy生成随机数 def generate(): while True:yield np.random.rand(2,N) anim=animation.FuncAnimation(fig,update,generate,interval=150) plt.show()