Matplotlib 简单画图

Posted 礼彬fly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matplotlib 简单画图相关的知识,希望对你有一定的参考价值。

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

 

 

以上是关于Matplotlib 简单画图的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#利用Matplotlib库画图

同样作为画图工具,gnuplot和matplotlib有啥异同点

用python进行简单的画图操作

怎样用python画图,为啥代码写好运行时错误?

python可以画图吗

python:matplotlib画图入门