使用python绘制3维正态分布图的方法


Posted in Python onDecember 29, 2018

今天使用python画了几个好玩的3D展示图,现在分享给大家。

先贴上图片

使用python绘制3维正态分布图的方法

使用python绘制3维正态分布图的方法

使用python绘制3维正态分布图的方法

使用的python工具包为:

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个3D图片理解成一个长方体。输入数据是三维的,x轴y轴和z轴。在第三个图片里面有x、y和z坐标的标识。在第三张图片中,我们可以理解为,z是随着x和y变化的函数。就像一个人在山丘地区走动一样,其中x和y表示的是方向,z表示的这个人在上坡还是下坡。第二张图片的中间那个,其实是一个3维的正态分布图。

具体的公式为:

使用python绘制3维正态分布图的方法

上面的是2维的,即只有x和y,如果是三维的话,需要一点变形,只需要在上面的公式基础之上把exp()里面改变为:exp(-((x-u)^2 + (y - u)^2)/(2q^2)), 这里的u表示平均值,q表示标准差。这样变化之后,z = f(x, y)。这就是z值的公式了,表示的是z值随着x和y值的变化而变化的函数。

下面贴一下代码

这是第二张图片的代码。

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
len = 8;
step = 0.4;


def build_layer(z_value):
 x = np.arange(-len, len, step);
 y = np.arange(-len, len, step);
 z1 = np.full(x.size, z_value/2)
 z2 = np.full(x.size, z_value/2)
 z1, z2 = np.meshgrid(z1, z2)
 z = z1 + z2;

 x, y = np.meshgrid(x, y)
 return (x, y, z);

def build_gaussian_layer(mean, standard_deviation):
 x = np.arange(-len, len, step);
 y = np.arange(-len, len, step);
 x, y = np.meshgrid(x, y);
 z = np.exp(-((y-mean)**2 + (x - mean)**2)/(2*(standard_deviation**2)))
 z = z/(np.sqrt(2*np.pi)*standard_deviation);
 return (x, y, z);

# 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
x1, y1, z1 = build_layer(0.2);
ax.plot_surface(x1, y1, z1, rstride=1, cstride=1, color='green')

x5, y5, z5 = build_layer(0.15);
ax.plot_surface(x5, y5, z5, rstride=1, cstride=1, color='pink')

# x2, y2, z2 = build_layer(-0.26);
# ax.plot_surface(x2, y2, z2, rstride=1, cstride=1, color='yellow')
#
# x6, y6, z6 = build_layer(-0.22);
# ax.plot_surface(x6, y6, z6, rstride=1, cstride=1, color='pink')

# x4, y4, z4 = build_layer(0);
# ax.plot_surface(x4, y4, z4, rstride=1, cstride=1, color='purple')

x3, y3, z3 = build_gaussian_layer(0, 1)
ax.plot_surface(x3, y3, z3, rstride=1, cstride=1, cmap='rainbow')
plt.show()


这是第三张图片的代码

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d

x, y = np.mgrid[-1:1:20j, -1:1:20j]
z = x * np.exp(-x ** 2 - y ** 2)

ax = plt.subplot(111, projection='3d')
ax.plot_surface(x, y, z, rstride=2, cstride=1, cmap=plt.cm.coolwarm, alpha=0.8)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()

以上这篇使用python绘制3维正态分布图的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
深入理解python中的atexit模块
Mar 07 Python
Django框架模板介绍
Jan 15 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
Keras自定义IOU方式
Jun 10 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
python如何写个俄罗斯方块
Nov 06 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 #Python
对python指数、幂数拟合curve_fit详解
Dec 29 #Python
对python实现二维函数高次拟合的示例详解
Dec 29 #Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 #Python
Python 做曲线拟合和求积分的方法
Dec 29 #Python
python 画三维图像 曲面图和散点图的示例
Dec 29 #Python
python实现三维拟合的方法
Dec 29 #Python
You might like
PHP获取数组最大值下标的方法
2015/05/12 PHP
php函数连续调用实例分析
2015/07/30 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python写的服务监控程序实例
2015/01/31 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python集合是否可变总结
2019/06/20 Python
python数据挖掘需要学的内容
2019/06/23 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
python与pycharm有何区别
2020/07/01 Python
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
写好自荐信要注意的问题
2013/11/10 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
个人工作决心书
2015/09/22 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
各国货币符号大全
2022/02/17 杂记
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js