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轴是其概率分布。我使用一组“电压值”及其概率对它进行了二维绘图。 在图中,红色曲线图对应一个脉冲长度,绿色曲线图对应另一脉冲长度。我尝试使用来自堆栈溢出(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()
如果有人可以帮助我在多个脉冲长度上做同样的事情,我将非常感激。 谢谢。
答案 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
输出