Я застрял на этой проблеме некоторое время, поэтому я обращаюсь за помощью здесь.
Я пытаюсь визуализировать 4-мерные данные: координаты x, y, z в сочетании сЗначение измерения v. Значения v были измерены на листе в трехмерном пространстве, и я хочу визуализировать это с помощью функции построения поверхности и лицевых цветов. Однако при построении графика цвета не похожи на правильные нормализованные значения данных. Я думаю, что мне не хватает некоторой нормализации цветов перед запуском поверхностного графика.
Посты, которые я нашел на этом сайте, связаны с раскраской данных z на трехмерном графике.
СекундаОшибка, которую я обнаружил, состоит в том, что в ylist есть 2 записи, но я вижу только равномерный слой, а не два разных значения. Однако при добавлении новых точек данных в список ylist эта проблема, похоже, исчезла.
любая помощь приветствуется!
Код, который я сейчас запускаю, выглядит следующим образом:
import numpy as np
import matplotlib.pyplot as plt
from numpy import ma
import matplotlib as mpl
from matplotlib import ticker, cm
from mpl_toolkits.mplot3d import Axes3D;
from scipy import interpolate
plt.interactive(True);
xlist = [100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600]
ylist = [500,600]
X, Y = np.meshgrid(xlist, ylist)
A =[[9.72,9.65,10.2,9.6,10.46,9.54,9.41,9.53,10.02,9.6,9.36,9.51,9.56,9.89,10.47,11.5],[9.87,10.16,10.22,10.17,10.09,10.15,10.15,10.7,10.18,9.96,10.25,10.27,9.72,10.87,11.52,11.79]]
B = [[10.3,9.93,10.24,10.17,10.1,10.02,9.72,9.96,10.8,9.81,10.12,10.4,10.74,10.98,11.27,11.69],[10.3,10.63,10.48,10.57,10.72,10.64,10.71,10.93,11.,10.53,10.51,10.73,10.96,10.82,11.08,12.08]]
C = [[10.2,10.26,10.7,10.37,10.82,10.32,10.3,10.29,10.61,10.53,10.48,10.96,11.02,11.31,11.55,12.04],[10.3,10.6,10.95,10.97,10.93,10.96,11.05,11.11,11.28,11.14,11.1,11.34,11.34,11.31,11.8,12.23]]
Z= np.zeros_like(X)
A -= np.min(A); A /= np.max(A);
B -= np.min(B); B /= np.max(B);
C -= np.min(C); C /= np.max(C);
fig = plt.figure()
norm = mpl.colors.Normalize(vmin = 0., vmax = 12.23)
ax = fig.gca(projection='3d');
a=ax.plot_surface(X, Y, Z+10,rstride=1, cstride=1, norm =norm, facecolors = cm.jet(A),shade=False); #aanmaken van surface op afstand z met x,y coordinaat en de waarde van V op dit (x,y,z) punt
b=ax.plot_surface(X, Y, Z+15, rstride=1, cstride=1,norm =norm,facecolors = cm.jet(A),shade=False);
b=ax.plot_surface(X, Y, Z+20, rstride=1, cstride=1,norm =norm,facecolors = cm.jet(A),shade=False);
cmap = plt.get_cmap('jet',30)
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
plt.colorbar(sm, ticks=np.linspace(0,12.23,12.23),boundaries=np.arange(0,12.23,.1))#plt.zlabel('z (mm)')
print(A)
plt.xlabel('x (mm)')
plt.ylabel('y (mm)')
plt.show()
результирующий график