Графики плотности вероятности 3D в Python

Я работаю над набором данных, состоящим из значений «длительности импульса» и 5 или 6 «значений напряжения», соответствующих каждой длительности импульса. Первое значение - это длительность импульса, за которой следуют напряжения. Найдите таблицу ниже.

15 -56В -47В -53В -50В -50В


16-49В -46В -52В -47В -50В


17-50 В -51 В -47 В -50 В -49 В


18-50 В -51 В -48 В -48 В -45 В


19 -49В -51В -45В -47В -52В


20-45В -47В -50В -47В -54В


21 -46В -52В -52В -49В -54В


22 -53В -51В -53В -56В -52В


23 -52В -45В -51В -56В -53В


24 -51В -52В -54В -58В -52В


25 -56В -53В -57В -55В -53В


26 -53В -52В -55В -52В


27 -54В -49В -56В -54В


28 -52В -52В -57В -56В -53В


29 -63В -60В -54В -58В -61В


30 -59В -70В -61В


Я хочу, чтобы оси X и Y были длиной импульса и напряжением, и я хочу, чтобы ось Z была его распределением вероятностей. У меня есть 2D-график для того же самого с использованием набора «значений напряжения» и его вероятности. Графики плотности вероятности 3D в Python На рисунке красный график соответствует длине одного импульса, а зеленый график - другой длине импульса. Я попытался сделать 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()

Я был бы очень благодарен, если бы кто-нибудь помог мне сделать то же самое для нескольких длин импульсов. Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
3 375
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, какого именно сюжета вы хотите достичь, но насколько я понял, вам нужно что-то вроде рисунка ниже. Ниже я помещаю только соответствующий / измененный код. Также неясно, какой переменной является длина вашего пульса. Поскольку у вас много длин импульсов, вы можете поместить функцию для определения mu_x, 'mu_y', Z в цикл for и построить несколько трехмерных поверхностей.

# Create grid and multivariate normal
x = np.linspace(-100, 0, 200) # Create a mesh of 200 x-points
y = np.linspace(-30, 30, 200) # Create a mesh of 200 y-points

X, Y = np.meshgrid(x,y)
Z = bivariate_normal(X,Y,sigma_x,sigma_y,mu_x,mu_y)
Z2 = bivariate_normal(X,Y,sigma_x,sigma_y,mu_x-20,mu_y+10)

fig = plt.figure(figsize=(10, 8))
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z,cmap='Reds',linewidth=0, antialiased=True, zorder = 0.5)
ax.plot_surface(X, Y, Z2,cmap='Blues',linewidth=0, alpha=0.5, antialiased=True, zorder = 0.5)

Выход

Другие вопросы по теме