matplotlib seaborn 数据可视化(4)——2维数据表面描点图

import math
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import NonUniformImage
%matplotlib

#幅度系数
A = 4
#均值
mu = np.array([1, 1])
#方差
cov = np.array([[2, 0],[0, 2]])
cov_inverse = np.linalg.inv(cov)
#生成模型
#按步长取点,以均值为中心,正负2个方差为范围
x = np.arange(mu[0]-2*cov.max(),mu[0]+2*cov.max(),step)
y = np.arange(mu[1]-2*cov.max(),mu[1]+2*cov.max(),step)
#合成绘图面
X,Y = np.meshgrid(x,y)
#按解析表达式计算
Z =A* 1/np.sqrt(2*math.pi*np.linalg.det(cov)) * np.exp(-1/2*(
    (X-mu[0])**2*cov_inverse[0,0]
    +(Y-mu[1])**2*cov_inverse[1,1]
    +(X-mu[0])*(Y-mu[1])*cov_inverse[0,1]
    +(Y-mu[1])*(X-mu[0])*cov_inverse[1,0]
))
#指定成像参数
#索引步长
step=0.05
#透明系数
alpha = 0.6
#侧面等高线层数
xylevel = 50
#底层等高线层数
zlevel=int(len(x)/(2*step*100))
#坐标轴标识字体大小
label_size=16
#标题字体大小
title_size=int(1.5*label_size)
#设定画板
fig = plt.figure(6,figsize=(10,10))
#指定为3d模型
ax = fig.add_subplot(111,projection='3d')
#绘制表面
surface = ax.plot_surface(X,Y,Z,cmap='jet',alpha=alpha)
#显示颜色板
fig.colorbar(surface,shrink=0.8,aspect=10)
#设定坐标轴范围
ax.set_xlim(mu[0]-2*cov.max(),mu[0]+2*cov.max())
ax.set_ylim(mu[1]-2*cov.max(),mu[1]+2*cov.max())
ax.set_zlim(-np.around(Z.max(),decimals=2),np.around(Z.max(),decimals=2))
#绘制侧面、底面等高线
ax.contour(X,Y,Z,zdir='x',offset=X.min(),levels=xylevel)
ax.contour(X,Y,Z,zdir='y',offset=Y.max(),levels=xylevel)
ax.contour(X,Y,Z,zdir='z',offset=-Z.max(),cmap='jet',alpha=alpha,levels=zlevel)
ax.contourf(X,Y,Z,zdir='z',offset=-Z.max(),cmap='jet',alpha=alpha,levels=zlevel)
#显示坐标轴标识
ax.set_xlabel('x',fontsize=label_size)
ax.set_ylabel('y',fontsize=label_size)
ax.set_zlabel('z',fontsize=label_size)
#设定标题
ax.set_title(r"$Z=\frac{1}{\sqrt{2\pi \det(\Sigma)}}\exp\left\{ -\frac{1}{2}\left[ (x-\mu)^\top \Sigma^{-1} (x-\mu)\right]\right\}$",fontsize=title_size)
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fanshaoliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值