注(百度百科案例)
使用二维数据集和其他一些数据:
散点图:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(2000)
y = np.random.standard_normal((1000,2))
plt.figure(figsize=(7,5))
plt.plot(y[:,0],'ro')
plt.grid(True)
plt.xlabel('1st')
plt.ylabel('2st')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.title('梦里是客')
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('1st')
plt.ylabel('2st')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.title('梦里是客')
plt.show()
直方图:
c = np.random.randint(0,10,len(y))
plt.figure(figsize=(7,5))
plt.hist(y,label=['1st','2st'],bins=25)
plt.grid(True)
plt.legend(loc=0)
plt.xlabel('value')
plt.ylabel('yyyyy')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.title('梦里是客')
plt.show()
两个数据集的数据在直方图中堆叠:
c = np.random.randint(0,10,len(y))
plt.figure(figsize=(7,5))
plt.hist(y,label=['1st','2st'],color=['b','g'],stacked=True,bins=25)
plt.grid(True)
plt.legend(loc=0)
plt.xlabel('value')
plt.ylabel('yyyyy')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.title('梦里是客')
plt.show()
箱型图:
y = np.random.standard_normal((100,2))
c = np.random.randint(0,10,len(y))
fig,ax = plt.subplots(figsize=(7,4))
plt.boxplot(y)
plt.grid(True)
plt.setp(ax,xticklabels=['1st','2st'])
plt.xlabel('value')
plt.ylabel('yyyyy')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.title('梦里是客')
plt.show()
数学示例:
def func(x):
return 0.5 * np.exp(x) +1
a,b = 0.5,1.5
x = np.linspace(0,2)
y = func(x)
fig,ax = plt.subplots(figsize=(7,5))
plt.plot(x,y,'b',linewidth=2)
plt.ylim(ymin=0)
Ix = np.linspace(a,b)
Iy = func(Ix)
verts = [(a,0)]+list(zip(Ix,Iy))+[(b,0)]
poly = Polygon(verts,facecolor='0.7',edgecolor='0.5')
ax.add_patch(poly)
plt.text(0.5*(a+b),1,r"$\int_a^b fx\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([func(a),func(b)])
ax.set_yticklabels(('$f(a)$','$f(b)$'))
plt.grid(True)
plt.show()
3D绘图:
from mpl_toolkits.mplot3d import Axes3D
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
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()
用相同的数据绘制3D散点图,但是现在用 view_init
函数设置不同的视角:
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
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='^')
#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()