У меня есть набор данных в форме (тета, Рин, Раут). Я хотел бы использовать эти данные по всей высоте оболочки длиной 10 см. Геометрия точек - это поверхность внутренней (Rin) и внешней (Rout) оболочки.
Я хотел бы создать базовый график, где каждой точке присваивается интенсивность цвета. (как тепловая карта), основанная на том, как высоко его значение, и затем цвета сглаживаются до некоторой степени, чтобы создать связную поверхность, а не дискретные точки. Значения Rin и Rout представляют собой вариации поверхности около R = 5 см (т. Е. 5-Rin и R + Rout).
В настоящее время я использую matplotlib, однако при необходимости я мог бы использовать другие библиотеки.
Я также посмотрел этот пост:
Как создать трехмерную тепловую карту из дискретного набора данных в Python?
и попытался запустить пример и попытатьсявключить мои данные в пошаговых шагах. Я могу преуспеть в зацикливании по высоте, но поверхность XY (Rin и Rout) не будет транслироваться.
Любая помощь будет оценена. У меня такое чувство, что я упускаю что-то очевидное в том, что, вероятно, является последним шагом. Код ниже:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D, get_test_data
df = pd.read_excel('SomeWorkbook.xlsx', sheet_name='Sheet2')
##################################################
# Define the Data
##################################################
values = df['theta'].values
values1 = df['Rin'].values
values2 = df['Rout'].values
# Rin =5-values2
# x = np.outer(Rin, np.cos(u))
# y = np.outer(Rin, np.sin(u))
Rout = (5+values2)
Rin = (5-values2)
H = 100
x = []
y = []
z = []
v = []
# theta = (values/180)*np.pi
theta = values
Z = np.linspace(0,H,200)
for h in Z:
for t in theta:
x.append(np.outer(Rin,np.cos(t)))
y.append(np.outer(Rin,np.sin(t)))
z.append(h)
v.append(np.sin(t)*np.cos(t))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.view_init(elev=60)
ax.scatter(x,y,z,c=v,lw=0,s=10)