2013-08-12 3 views
3

У меня есть файл с тремя колонками, 5 миллионов строк. Это подобнокак построить карту тепла для трех столбцов

x,y,z 
3,4,6.7 
9,4,7.8 

х и у числа пикселов и г имеют соответствующие значения в точке (х, у)
как построить карту тепла?
2D-сюжет - это компромисс для моей первоначальной мысли.
Вы можете проверить мой оригинальный пост How to use griddata from scipy.interpolate

Я попробовал путь ниже, но это всего лишь точка график рассеяния.

import numpy as np 
import pylab as pl 
x,y,z =np.loadtxt('3columns.csv',delimiter=',',usecols=(0,1,2),unpack=True) 

pl.scatter(x, y, c=z) 

pl.show() 
+0

Есть ли дубликаты? Возможны ли все возможные координаты, представленные в вашем CSV, или есть неопределенные пиксели? – lejlot

+0

Вам нужен какой-то 3D-участок, а не 2D-график рассеяния? Если да, просмотрели ли вы http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html? – lmjohns3

+0

Существует много дубликатов из-за конвейера. Многие пиксельные значения одинаковы, но все пиксели определены ... Я проверил эту ссылку. Я предпочитаю трехмерный участок поверхности, который нужно использовать griddata. Данные являются своего рода нерегулярными, поэтому, возможно, сначала нужно построить сетку. – questionhang

ответ

0

Я столкнулся с подобными проблемами. Я сделал, чтобы установить массив Z[row[0]][row[1]] = row[2].

import numpy as np 
x,y,z =np.loadtxt('3columns.csv',delimiter=',',usecols=(0,1,2),unpack=True) 
nx = x.max() - x.min() + 1 
ny = y.max() - y.min() + 1 
Z = np.zeros((nx,ny)) 

assert x.shape == y.shape == z.shape 
for i in range(len(x)): 
    Z[x[i]-x.min()][y[i]-y.min()] = z[i] 

import matplotlib.pyplot as plt 
fig = plt.figure() 
figure_name = 'figure_name' 
plt.pcolor(np.arange(nx),np.arange(ny),Z,cmap=plt.cm.Reds) 
plt.colorbar() 
plt.xlim(0,x.max()-x.min()) 
plt.ylim(0,y.max()-y.min()) 

xlabels = np.arange(x.min(),x.max(),Nspacingx) # define Nspacing accordingly 
ylabels = np.arange(y.min(),y.max(),Nspacingy) 
plt.xticks(np.arange(0,x.max()-x.min(),Nspacingx),xlabels) 
plt.yticks(np.arange(0,y.max()-y.min(),Nspacingy),ylabels) 

plt.savefig(figure_name,dpi=400) 

Таким образом вы можете построить 2D-карту тепла из файла данных из трех столбцов.

Смежные вопросы