Создание тепловой карты с использованием трехмерных данных в matplotlib

У меня есть функция returnValuesAtTime которая возвращает три списка – x_vals , y_vals и swe_vals . Все три списка имеют одинаковую длину, и каждый элемент в swe_vals соответствует x-value от x_vals и y-value от y_vals . Я хочу создать swe_vals с легендой, которая использует (x,y) координаты и swe_vals как интенсивность.

Я написал следующий код:

 def plotValuesAtTimeMap(t): x_vals,y_vals,swe_vals=returnValuesAtTime(t) x_points=len(x_vals) y_points=len(y_vals) xx=np.linspace(x_vals[0],x_vals[-1],x_points) yy=np.linspace(y_vals[0],y_vals[-1],y_points) fig,ax=plt.subplots() im=ax.pcolormesh(xx,yy,z) fig.colorbar(im) ax.axis('tight') plt.show() 

Когда три списка будут получены с помощью returnValuesAtTime(t) , я беру длины x_vals и y_vals . Затем я использую их для генерации интервала для x и y-направлений, причем пределы являются первым и последним элементами x_vals и y_vals . Затем я пытаюсь создать colormesh . Но это дает мне пустой colormesh без каких-либо значений.

Что может пойти не так? Будет ли использование трехмерного массива numpy вместо трех списков решить проблему?

Первые 10 элементов каждого из списков:

 x_vals[0:10] [439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893, 439936.86573189893] y_vals[0:10] [4514018.2797159087, 4513898.2797159087, 4513778.2797159087, 4513658.2797159087, 4513538.2797159087, 4513418.2797159087, 4513298.2797159087, 4513178.2797159087, 4513058.2797159087, 4512938.2797159087] swe_vals[0:10] [2.7520323, 2.7456229, 2.7456021, 2.745455, 2.7478349, 2.7445269, 2.7484877, 2.7524617, 2.75491, 2.7509627] 

Изменить :

Я добавил график рассеяния, показывающий диапазон сетки (x, y) ниже:

введите описание изображения здесь

Значения x и y указаны в списках, каждый из которых имеет длину 6804. Каждая точка (x, y) имеет соответствующий z-значение в отдельном списке, который также имеет длину 6804. Чтобы уточнить, чего я надеюсь достичь, я хочу создать диаграмму, подобную графическому изображению с величиной оси z, представленной цветом каждой сетки на графике. Что-то вроде того, что показано ниже:

введите описание изображения здесь

На примере графика все значения z одинаковы. Таким образом, цвет такой же во всем пространстве сетки.

Отредактировано новым результирующим сюжетом (на основе предложений члена CT Zhu):

введите описание изображения здесь

One Solution collect form web for “Создание тепловой карты с использованием трехмерных данных в matplotlib”

Похоже, если вы contourf форму x , y , z на квадратную матрицу, вы можете сделать contourf график:

 In [7]:X Out[7]: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) In [8]:Y Out[8]: array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [4, 4, 4, 4, 4, 4, 4, 4, 4, 4], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], [7, 7, 7, 7, 7, 7, 7, 7, 7, 7], [8, 8, 8, 8, 8, 8, 8, 8, 8, 8], [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]]) plt.contourf(X,Y,np.random.random((10,10))) #reshape Z too! plt.colorbar() 

введите описание изображения здесь

  • 'недопустимое значение, обнаруженное в предупреждении double_scalars, возможно, numpy
  • Цвет Flier в коробке с matplotlib
  • Python эквивалент функции «ismember» MATLAB
  • Как подавить предупреждение matplotlib?
  • Визуализация 3D-numpy-массива кадр за кадром
  • Python - лучший язык программирования в мире.