Python中的3D概率密度图

时间:2018-09-09 18:26:35

标签: python matplotlib probability-distribution

我正在研究一个由“脉冲长度”值和与每个脉冲长度相对应的5或6个“电压值”组成的数据集。第一个值是脉冲长度,后跟电压。查找下表。

15 -56V -47V -53V -50V -50V


16 -49V -46V -52V -47V -50V


17 -50V -51V -47V -50V -49V


18 -50V -51V -48V -48V -45V


19 -49V -51V -45V -47V -52V


20 -45V -47V -50V -47V -54V


21 -46V -52V -52V -49V -54V


22 -53V -51V -53V -56V -52V


23 -52V -45V -51V -56V -53V


24 -51V -52V -54V -58V -52V


25 -56V -53V -57V -55V -53V


26 -53V -52V -55V -52V


27 -54V -49V -56V -54V


28 -52V -52V -57V -56V -53V


29 -63V -60V -54V -58V -61V


30 -59V -70V -61V


我希望X和Y轴是脉冲长度和电压,我希望Z轴是其概率分布。我使用一组“电压值”及其概率对它进行了二维绘图。 enter image description here 在图中,红色曲线图对应一个脉冲长度,绿色曲线图对应另一脉冲长度。我尝试使用来自堆栈溢出(Plot normal distribution in 3D)的多元正态分布示例来以相同的方式进行3D绘制。由于我对3D绘图的经验很少,因此无法在具有不同Y轴“脉冲长度”值的同一表面上绘制多个曲面图。我尝试过的代码如下。

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

 #Parameters to set
 mu_x = -48.8
 sigma_x = np.sqrt(6.5)

 mu_y = 0
 sigma_y = np.sqrt(16)

 #Create grid and multivariate normal
 x = range(-100,0)
 y = range(15,30)
 X, Y = np.meshgrid(x,y)
 Z = bivariate_normal(X,Y,sigma_x,sigma_y,mu_x,mu_y)


 #Make a 3D plot
 fig = plt.figure()
 ax = fig.gca(projection='3d')
 ax.plot_surface(X, Y, Z,cmap='Reds',linewidth=0, antialiased=True, 
 zorder = 0.5)

 ax.set_xlabel('Voltage')
 ax.set_ylabel('Pulse Length')
 ax.set_zlabel('Normal Distribution')
 plt.show()

如果有人可以帮助我在多个脉冲长度上做同样的事情,我将非常感激。 谢谢。

1 个答案:

答案 0 :(得分:1)

我不知道您想精确实现什么样的情节,但是根据我的理解,您想要类似下图的内容。我只在下面放置相关/修改后的代码。还不清楚您的脉冲长度是什么变量。由于您有许多脉冲长度,因此您可以将函数放在SELECT t.your_column FROM (SELECT DISTINCT a.Student_id, MAX(b.attendance_recorded_time), a.class_type, MAX(a.class_time) FROM student_details LEFT JOIN b ON a.student_id = b.student_id WHERE a.class_time > b.attn_recorded_time AND b.attn_recorded_time BETWEEN a.class_time AND (a.class_time - 1/24) GROUP BY attendance_recorded_time, class_time ORDER BY a.student_id, a.class_time ) ; 循环中定义mu_x,'mu_y',Z并绘制几个3d曲面。

for

输出

enter image description here