matplotlib 库( http://www.matp1otlìb.org )的基本可视化功能。
主要是2-D绘图、金融绘图和3-D绘图
一.2-D绘图
1.1一维数据集
#导入所需要的包
import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt
np.random.seed(1000)
y=np.random.standard_normal(20) #生成20个正太分布随机数
x=range(len(y)) #简单的绘图
plt.plot(x,y)
其实,不需要输入x参数也可以绘图,因为plot 会注意到何时传递了ndarray 对象。在这种情况下,没有必要提供x 值的"额外"信息, 如果你只提供y 的, plot 以索\') I 值作为对应的x 值、因此,下面一行代码会生成完全一样的输出。
plt.plot(y)
还可以传递附加方法:
plt.plot(y.cumsum()) #对y的累计求和
还可以操作细节,
plt.plot(y.cumsum()) plt.grid(True) #添加表格 plt.axis(\'tight\') #显示x轴的全刻度 plt.xlim(-1,20) #规定x轴最大、最小值 plt.ylim(np.min(y.cumsum())-1,np.max(y.cumsum())+1)
plt.show()
plt.axis具体参数:
Empty :返回 当前坐标轴限值
off :关闭做标轴线相标签
equal :使用等刻度
scalcd :通过尺寸变化平衡刻度
tight :使所有 数据可见{缩小限值)
Image: 使所有数据可见(使用数据限值)
[xmin、xmax, ymin, ymax] :将设置限定为给定(一组)值
plt.figure(figsize=(12,8)) plt.plot(y.cumsum(),\'b\',lw=1.5) plt.plot(y.cumsum(),\'ro\') plt.grid(True) plt.axis(\'tight\') plt.xlabel(\'index\') plt.ylabel(\'value\') plt.title(\'A simple picture\') plt.show()
颜色
可以通过调用matplotlib.pyplot.colors()得到matplotlib支持的所有颜色。
| 别名 | 颜色 | 别名 | 颜色 | |
|---|---|---|---|---|
| b | 蓝色 | g | 绿色 | |
| r | 红色 | y | 黄色 | |
| c | 青色 | k | 黑色 | |
| m | 洋红色 | w | 白色 | |
线条标记
| 标记maker | 描述 | 标记 | 描述 | |
|---|---|---|---|---|
| ‘o’ | 圆圈 | ‘.’ | 点 | |
| ‘D’ | 菱形 | ‘s’ | 正方形 | |
| ‘h’ | 六边形1 | ‘*’ | 星号 | |
| ‘H’ | 六边形2 | ‘d’ | 小菱形 | |
| ‘_’ | 水平线 | ‘v’ | 一角朝下的三角形 | |
| ‘8’ | 八边形 | ‘<’ | 一角朝左的三角形 | |
| ‘p’ | 五边形 | ‘>’ | 一角朝右的三角形 | |
| ‘,’ | 像素 | ‘^’ | 一角朝上的三角形 | |
| ‘+’ | 加号 | ‘\’ | 竖线 | |
| ‘None’,’’,’ ‘ | 无 | ‘x’ | X | |
用来该表线条的属性
| 风格linestyle或ls | 描述 | 线条风格linestyle或ls | 描述 | |
|---|---|---|---|---|
| ‘-‘ | 实线 | ‘:’ | 虚线 | |
| ‘–’ | 破折线 | ‘None’,’ ‘,’’ | 什么都不画 | |
| ‘-.’ | 点划线 | |||
1.2 二维数据集
np.random.seed(2000) y=np.random.standard_normal((20,2)).cumsum(axis=0) #axis=0 按列累加求和 plt.figure(figsize=(8,6)) plt.plot(y,lw=1.5) plt.plot(y,\'ro\') plt.grid(True) plt.axis(\'tight\') plt.xlabel(\'index\') plt.ylabel(\'value\') plt.title(\'A simple plot\') plt.show()
添加图例
plt.figure(figsize=(8,6)) plt.plot(y[:,0],lw=1.5,label=\'1st\') plt.plot(y[:,1],lw=1.5,label=\'2st\') plt.plot(y,\'ro\') plt.grid(True) plt.axis(\'tight\') plt.xlabel(\'index\') plt.ylabel(\'value\') plt.legend(loc=0) plt.title(\'A simple plot\') plt.show()
图例位置参数:
plt.legend(loc=\'’)
|
0: ‘best\'
1: ‘upper right\'
2: ‘upper left\'
3: ‘lower left\'
|
4: ‘lower right\'
5: ‘right\'
6: ‘center left\'
|
7: ‘center right\'
8: ‘lower center\'
9: ‘upper center\'
10: ‘center\'
|
使用双坐标轴
y[:,0]=y[:,0]*100
fig,ax1=plt.subplots(figsize=(8,6))
plt.plot(y[:,0],\'c\',lw=1.5,label=\'1st\')
plt.plot(y[:,0],\'ro\')
plt.legend(loc=8)
ax2=ax1.twinx() #添加另一个坐标轴
plt.plot(y[:,1],lw=1.5,label=\'2st\')
plt.plot(y[:,1],\'ro\')
plt.grid(True)
plt.axis(\'tight\')
plt.xlabel(\'index\')
plt.ylabel(\'value\')
plt.legend(loc=0)
plt.title(\'A simple plot\')
plt.show()
画两个子图plt.figure(figsize=(8,6))
plt.figure(figsize=(8,6)) plt.subplot(211) #2x1 第一个子图 plt.plot(y[:,0],\'c\',lw=1.5,label=\'1st\') plt.plot(y[:,0],\'ro\') plt.legend(loc=0) plt.subplot(212) #两行一列 第二个子图 plt.plot(y[:,1],\'g\',lw=1.5,label=\'2st\') plt.plot(y[:,1],\'ro\') plt.legend(loc=0) plt.grid(True) plt.axis(\'tight\') plt.xlabel(\'index\') plt.ylabel(\'value\') plt.title(\'A simple plot\') plt.show()
不同种类的两个子图
plt.figure(figsize=(8,6))
plt.subplot(211)
plt.plot(y[:,0],\'c\',lw=1.5,label=\'1st\')
plt.plot(y[:,0],\'ro\')
plt.legend(loc=0)
plt.grid(True)
plt.axis(\'tight\')
plt.xlabel(\'index\')
plt.ylabel(\'value\')
plt.title(\'1 dataset\')
plt.subplot(212)
plt.bar(np.arange(len(y)),y[:,1],color=\'g\',width=0.5,label=\'2st\') #条形图
plt.legend(loc=0)
plt.grid(True)
plt.axis(\'tight\')
plt.xlabel(\'index\')
plt.ylabel(\'value\')
plt.title(\'2nd dataset\')
plt.show()
其他绘图样式
散点图
np.random.seed(2000) y=np.random.standard_normal((2000,2)) plt.figure(figsize=(8,6)) plt.scatter(y[:,0],y[:,1]) plt.grid(True) plt.xlabel(\'1 data\') plt.ylabel(\'2 data\') plt.show()
plt.figure(figsize=(8,6)) plt.plot(y[:,0],y[:,1],color=\'r\',marker=\'o\') plt.grid(True) plt.xlabel(\'1 data\') plt.ylabel(\'2 data\') plt.show()
scatter 绘图函数可以加入第三维,通过不同的颜色进行可视化.并使用彩条加以描述。为此,我们用随机数据生成第三个数据集,这次使用的是0 和10 之间的整数:
展示的散点图有不同颜色小点表示的第三维,还有作为颜色图例的影条:
c = np.random.randint(0, 10, len(y)) plt.figure(figsize=(7,5)) plt.scatter(y[: , 0], y [ : , 1] , c=c , marker =\'o\') plt.colorbar() plt.grid(True) plt.xlabel(\'lst\') plt.ylabel(\'2nd\') plt.title(\'Scatter Plot\')
直方图
plt.figure(figsize=(7,4)) plt.hist(y,label=[\'1st\',\'2en\'],bins=20) #bins=20 代表分为20组 plt.legend(loc=0) plt.grid(True) plt.xlabel(\'index\') plt.ylabel(\'value\') plt.show()
详解hist函数
matplotlib.pyplot.hist( x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=u\'bar\', align=u\'mid\', orientation=u\'vertical\', rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, **kwargs)
参数描述:
x :列表对象 ndarray 对象
bins: 数据组( bin )数
range: 数据组的下界和上界
nonned :规范化为整数1
weights: x 轴上每个值的权重
cumulative: 每个数据组包含较低组别的计数
hisstype :选项(字符串): ar, barstacked, step、stepfìlled
align: 选项(字符串): left, mid, righl
onentatlon: 选项(字符串): horizontal, vertical
rwideth:条块的相对宽度
log :对数刻度
color :每个数据集的颜色(类似数组)
label :标签所用的字符串或者字符串序列
stacked :堆叠多个数据集
两个数据集的数据在直方图的堆叠,只需要修改hist中参数:
plt.figure(figsize=(7,4)) plt.hist(y,label=[\'1st\',\'2en\'],bins=20) plt.legend(loc=0) plt.grid(True) plt.xlabel(\'index\') plt.ylabel(\'value\') plt.show()
箱型图
fig,ax=plt.subplots(figsize=(7,4)) plt.boxplot(y) plt.setp(ax,xticklabels=[\'1st\',\'2nd\']) # 设置(一组)图表的实例的属性 plt.grid(True) plt.xlabel(\'value\') plt.ylabel(\'fre\') plt.show()
data=np.random.standard_normal(20) lin=plt.plot(data,\'r\') plt.setp(lin,linestyle=\'-\') plt.show()
将线的样式更改为"短划线"
生成积分曲线
#1:积分函数 def fun(x): return 0.5*np.exp(x)+1 #2:定义积分区 a,b=0.5,1.5 x=np.linspace(0,2) y=fun(x) #3:绘制函数图像 fig,ax=plt.subplots(figsize=(7,4)) plt.plot(x,y,\'r\',lw=1.5) plt.ylim(ymin=0) from matplotlib.patches import Polygon #4:使用Polygon 函数生成阴影部分(‘补丁’),表示积分面积: Ix=np.linspace(a,b) Iy=fun(x) verts=[(a,0)]+ list(zip(Ix,Iy)) +[(b,0)] #zip把列表转化为元组l1= [1,2,3] l2=[2,3,4] lsit(zip(l1,l2))=[(1,2),(2,3),(3,4)] poly = Polygon(verts, facecolor =\'0.9\',edgecolor=\'0.1\') ax.add_patch(poly) plt.text(0.5 * (a + b) , 1, r"$\int_a^b f(x)\mathrm{d}x$" ,horizontalalignment=\'center\' , fontsize=20) plt.figtext(0.9, 0.075, \'$X$\') plt.figtext(0.075, 0.9, \'$f(x)$\') ax.set_xticks((a, b)) ax.set_xticklabels((\'$a$\' , \'$b$\' )) ax.set_yticks( [ fun(a) , fun(b)]) ax . set_yticklabels((\'$f(a)$\' , \'$f(b)$\')) plt.grid(True) plt.show()
二 .3-D绘图
strike = np.linspace(50, 150, 24) ttm = np.linspace(0.5, 2.5, 24) strike, ttm = np.meshgrid(strike, ttm) iv = (strike - 100) ** 2 / (100 *strike) / ttm # generate fake implied νolatilities from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(9, 6)) ax = fig.gca(projection=\'3d\') surf = ax.plot_surface(strike, ttm, iv, rstride=2 , cstride=2, cmap=plt.cm.coolwarm, linewidth=0.5, antialiased=True) ax.set_xlabel(\'strike\') ax.set_ylabel(\'time-to-maturity\') ax.set_zlabel(\'implied volatility\') fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
plot_surface 参数
X, Y, Z :2D 数组形式的数据值
rstride :数组行距(步长大小)
cstride: 数组列距(步长大小)
color: 曲面块颜包
cmap: 曲面峡颜色映射
facecolors :单独曲面块表面\'颜包
norm :将值映射为颜色的Normalize 实例
Vmin:映射的最小值
vmax :映射的最大值
还有可以用view_init 设置不同的视角:
fig = plt.figure(figsize=(8, 5)) ax = fig.add_subplot(111,projection=\'3d\') ax.view_init(30, 60) ax.scatter(strike, ttm, iv, zdir=\'z\' , s=25, c=\'b\' , marker=\'^\') ax.set_xlabel(\'strike\') ax.set_ylabel(\'time-to-maturity\') ax.set_zlabel(\'implied volatili ty\') plt.show()