Создание тепловой карты на цилиндре в matplotlib - PullRequest
0 голосов
/ 18 октября 2019

У меня есть набор данных в форме (тета, Рин, Раут). Я хотел бы использовать эти данные по всей высоте оболочки длиной 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...