Python 笔记 数据可视化

静态2D绘图

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1000)
y=np.random.standard_normal(20)
x=np.arange(len(y))
plt.subplot(3,3,1)
plt.plot(x,y)
# 如果只提供y值,plot以索引值为x
plt.subplot(3,3,2)
plt.plot(y)
# 还可以附加方法来传递对象
plt.subplot(3,3,3)
plt.plot(y.cumsum())
# 操纵坐标轴和增加网络及标签的函数
plt.subplot(3,3,4)
plt.plot(y.cumsum())
# 关闭网络
plt.grid(False)
# 两个轴使用相同刻度
plt.axis('equal')
# 设置坐标轴最大值和最小值
plt.subplot(3,3,5)
plt.plot(y.cumsum())
plt.xlim(-1,20)
plt.ylim(
	np.min(y.cumsum()-1),np.max(y.cumsum()+1)
)
# 添加标签
plt.subplot(3,3,6)
# 绘制线宽为1.5个点的蓝色线
plt.plot(y.cumsum(),'b',lw=1.5)
# 绘制红色粗点
plt.plot(y.cumsum(),'ro')
plt.xlabel('index')
plt.ylabel('value')
plt.title('A simple plot')

plt.show()

二维数据集

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1000)
y=np.random.standard_normal((20,2)).cumsum(axis=0)
plt.subplot(1,3,1)
plt.plot(y,lw=1.5)
plt.plot(y,'ro')
plt.xlabel('index')
plt.ylabel('value')
plt.title('A Simple Plot')

# 带有图例
plt.subplot(1,3,2)
plt.plot(y[:,0],lw=1.5,label='1st')
plt.plot(y[:,1],lw=1.5,label='2nd')
plt.plot(y,'ro')
# 图例放在最佳位置
plt.legend(loc=0)
plt.xlabel('index')
plt.ylabel('value')
plt.title('A Simple Plot')

# 包含两个不同刻度的数据集图表
y[:,0]=y[:,0]*100
plt.subplot(1,3,3)
plt.plot(y[:,0],lw=1.5,label='1st')
plt.plot(y[:,1],lw=1.5,label='2nd')
plt.plot(y,'ro')
# 图例放在最佳位置
plt.legend(loc=0)
plt.xlabel('index')
plt.ylabel('value')
plt.title('A Simple Plot')
plt.show()

# 双y轴(左右)
# 定义图与轴对象
fig,ax1=plt.subplots()
plt.plot(y[:,0],'b',lw=1.5,label='1st')
plt.plot(y[:,0],'ro')
plt.legend(loc=0)
plt.xlabel('index')
plt.ylabel('value 1st')
plt.title('A Simple Plot')
# 创建第二个轴对象,共享x轴
ax2=ax1.twinx()
plt.plot(y[:,1],'g',lw=1.5,label='2nd')
plt.plot(y[:,1],'ro')
plt.legend(loc=0)
plt.ylabel('value 2nd')
plt.show()

# 子图
plt.figure(figsize=(10,6))
plt.subplot(211)
plt.plot(y[:,0],lw=1.5,label='1st')
plt.plot(y[:,0],'ro')
plt.legend(loc=0)
plt.ylabel('value')
plt.title('A Simple Plot')
plt.subplot(212)
plt.plot(y[:,1],lw=1.5,label='2nd')
plt.plot(y[:,1],'ro')
plt.legend(loc=0)
plt.xlabel('index')
plt.ylabel('value')
plt.show()

其他绘图样式

import numpy as np
np.random.seed(2000)
import matplotlib.pyplot as plt

# 散点图
y=np.random.standard_normal((1000,2))
plt.figure(figsize=(10,6))
# 两种表示方法,plot/scatter
# plt.plot(y[:,0],y[:,1],'ro')
plt.scatter(y[:,0],y[:,1],marker='o')
plt.xlabel('1st')
plt.ylabel('2nd')
plt.title('Scatter Plot')
plt.show()

# scatter的其他用法
c=np.random.randint(0,10,len(y))
plt.figure(figsize=(10,6))
plt.scatter(y[:,0],y[:,1],c=c,cmap='coolwarm',marker='o')
plt.colorbar()
plt.xlabel('1st')
plt.ylabel('2nd')
plt.title('Scatter Plot')
plt.show()

# 直方图
plt.figure(figsize=(10,6))
plt.hist(y,label=['1st','2nd'],bins=25)
plt.legend(loc=0)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Histogram')
plt.show()

# 堆叠直方图
plt.figure(figsize=(10,6))
plt.hist(y,label=['1st','2nd'],bins=20,color=['b','g'],stacked=True,alpha=0.5)
plt.legend(loc=0)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Histogram')
plt.show()

# 箱图
fig,ax=plt.subplots(figsize=(10,6))
plt.boxplot(y)
# 设置单独的x标签
plt.setp(ax,xticklabels=['1st','2nd'])
plt.xlabel('data set')
plt.ylabel('value')
plt.title('Boxplot')
plt.show()

# 绘制积分图像并显示公式
def func(x):
	return 0.5*np.exp(x)+1
# 积分上下限
a,b=0.5,1.5
# x范围
x=np.linspace(0,2)
# y范围
y=func(x)
# 积分上下限
Ix=np.linspace(a,b)
Iy=func(Ix)
# 列表对象,包含所绘制多边形坐标的元组对象
verts=[(a,0)]+list(zip(Ix,Iy))+[(b,0)]
# 绘图
from matplotlib.patches import Polygon
# 将函数绘制为一条蓝色的线
fig,ax=plt.subplots(figsize=(10,6))
plt.plot(x,y,'b',linewidth=2)
# 为纵轴设定最小值
plt.ylim(bottom=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 f(x)\mathrm{d}x$',horizontalalignment='center',
	fontsize=20
)
# 放置周标签
plt.figtext(0.90,0.075,'$x$')
plt.figtext(0.075,0.9,'$f(x)$')
# 设置x轴刻度
ax.set_xticks((a,b))
ax.set_xticklabels(('$a$','$b$'))
# 设置y轴刻度
ax.set_yticks([func(a),func(b)])
ax.set_yticklabels(('$f(a)$','$f(b)$'))
plt.show()

静态3D绘图

import numpy as np
import matplotlib.pyplot as plt

# 波动率曲面
# 行价权50-150
# 到期时间0.5-2.5年
# 包含行价权的ndarray对象
strike=np.linspace(50,150,24)
# 包含到期日期的ndarray对象
ttm=np.linspace(0.5,2.5,24)
# 创建的两个二维ndarray对象
strike,ttm=np.meshgrid(strike,ttm)
print(strike[:2].round(1))
# 虚拟的隐含波动率的值
iv=(strike-100)**2/(100*strike)/ttm
# 导入3D绘图功能
from mpl_toolkits.mplot3d import Axes3D
# 创建画布
fig=plt.figure(figsize=(10,6))
ax=plt.axes(projection='3d')
# 创建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()

# 从不同视角设置
fig=plt.figure(figsize=(10,6))
ax=fig.add_subplot(111,projection='3d')
# 设置视角
ax.view_init(30,60)
# 创建3D散点图
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 volatility')
plt.show()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值