使用python绘制3维正态分布图
来源:互联网 发布:java jdbc详解 编辑:程序博客网 时间:2024/04/27 20:31
今天使用python画了几个好玩的3D展示图,现在分享给大家。先贴上图片
使用的python工具包为:
from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D
在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个3D图片理解成一个长方体。输入数据是三维的,x轴y轴和z轴。在第三个图片里面有x、y和z坐标的标识。在第三张图片中,我们可以理解为,z是随着x和y变化的函数。就像一个人在山丘地区走动一样,其中x和y表示的是方向,z表示的这个人在上坡还是下坡。第二张图片的中间那个,其实是一个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 pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = 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 npimport matplotlib.pyplot as pltimport mpl_toolkits.mplot3dx, 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()
结束
阅读全文
0 0
- 使用python绘制3维正态分布图
- 利用python制作正态分布图
- 使用Python绘制雷达图
- 一维、二维正态分布概率密度曲线的绘制
- [python]使用python实现蜡烛图绘制
- python 正态分布随机数 numpy.random.randn 使用小技
- python 正态分布随机数 numpy.random.randn 使用小技
- python使用matplotlib绘制xy坐标轴图
- 使用Python绘制热图的库
- python使用matplotlib绘制折线图教程
- 正态分布,Python实现
- python正态分布代码
- 使用Python绘制热图的库 pyHeatMap 使用Python绘制热图的库 pyHeatMap
- python 生成随机一维或多维正态分布
- matlab如何绘制统计分析图(正态分布,柱形图,散点图)和matlab cftool拟合工具
- 绘制二元正态分布的密度函数图和等高线图MATLAB
- 均匀分布生成标准正态分布 python
- Python:使用matplotlib绘制图表
- django xadmin中主题的设置 问题
- 安装 Rabbitmq
- log4j博客
- 1006. Sign In and Sign Out (25)
- SpringMVC之Web-Spring,SpringMVC,Mybatic整合教程(五)
- 使用python绘制3维正态分布图
- 基于Ubuntu搭建Redis
- Linux开机 进入图形界面或命令行界面
- cookie 和session 的区别
- C++中的static关键字的总结
- Java并发编程-无锁CAS与Unsafe类及其并发包Atomic-后续不断更新
- 什么是XML
- 一个简单的求分数等级
- Leetcode592. 分数加减