2014-10-29 3 views
0

Я использую python2 и matplotlib.График (x, y, z) троек на плоскости 2d с цветовой схемой

У меня есть много троек (x, y, z). Мне нужно построить их как своего рода гистограмма/тепловая карта на 2-й плоскости с осями x и y и цвет с указанием z.

Основная проблема заключается в том, что x и y не находятся на какой-либо сетке, но свободно меняются, поэтому необходима некоторая интерполяция.

Я пробовал contour(X, Y, Z), но это занимает Z как 2d-массив, что означает, что ему нужны значения в сетке.

+2

Я бы заглянуть в '' griddata' в scipy.interpolate' интерполировать данные. – Ajean

ответ

0

hexbin Хотя может быть хорошо, если у вас есть тонны (х, у, г) троек с й и у будучи хорошо распределены, она поставляется с большим количеством довольно неприятными пробельным, если они не (и/или слишком мало).

Предположим, у вас есть

X = [ ... ] 
Y = [ ... ] 
Z = [ ... ] 

сначала нужно создать сетку

grid_x, grid_y = np.mgrid[0:max(Y):800j, 0:max(X):800j] 

где 0:max(Y) интервал и 800 подсчетом шаг. Затем вручную интерполировать с

values = interpolate.griddata((Y, X), Z, (grid_x, grid_y), method='linear') 

который приводит в 2d массив, который может быть построен как этот

pl.imshow(values, origin='lower', extent=[0, max(X), 0, max(Y)], 
      aspect='auto', cmap=pl.get_cmap('YlOrRd')) 
1

Мне нравится использовать hexbin с его C способ ввода для такого рода вещей. Например, если вы анализироваться данные из кортежа троек в x_arr, y_arr и z_arr массивов, вы можете сделать:

from matplotlib.pyplot import hexbin 

hexbin(x_arr, y_arr, C=z_arr) 

В этом неявно усредняет данные по шестиугольных бункерах. Вы можете изменить опцию reduce_C_function, если хотите что-то отличное от простого среднего. Вы можете изменить количество ящиков с опцией gridsize.