數據格式如下:
8_15/l_eye/2732.png -20.5773 -5.17769 -3.34583 21.5859 9_13_1/l_eye/1211.png -10.1145 34.9928 -38.2122 -26.3371 8_20/l_eye/5966.png -44.0264 50.2898 63.5838 -49.1353 8_13/l_eye/8780.png -16.9358 50.4528 -44.2617 -57.1462 9_16_2/l_eye/5370.png -21.2264 17.0589 4.33619 -20.3562 9_15_1/l_eye/66.png 40.5758 -21.0923 12.0032 40.8452 8_13/l_eye/6664.png 51.0789 55.3987 -67.2433 -79.1243 9_15_2/l_eye/4429.png 16.958 30.0386 -24.5935 -26.4802 8_21/l_eye/2579.png -20.619 4.7845 21.9891 27.529 8_21/l_eye/8464.png -36.8559 54.4664 -32.1576 -67.6335 8_21/l_eye/359.png 20.9732 2.25414 -3.88966 41.175 9_16_2/l_eye/3065.png 7.16623 43.091 35.9651 -28.4994 9_14_2/l_eye/1961.png 33.3302 28.3553 22.7904 -28.5209 9_16_1/l_eye/2038.png 56.9721 24.6518 -23.5831 -39.2209
以2、3列為x、y繪制一個熱力圖
以4、5列為x、y繪制一個熱力圖
#!/usr/bin/python # -*- encoding: utf-8 -*- import numpy as np from matplotlib import pyplot as plt #import thread #from threading import Thread from multiprocessing import Process import pdb def generate_heat_array(is_test=0): #pdb.set_trace() if is_test==1: # gussian distribution mean = [0,0] cov = [[0,1],[1,0]] x, y = np.random.multivariate_normal(mean, cov, 10000).T show_heat_map(x,y) return x_head=[] y_head=[] x_gaze=[] y_gaze=[] for line in open('train.txt'): split_data=line.split() x_head.append(float(split_data[1])) y_head.append(float(split_data[2])) x_gaze.append(float(split_data[3])) y_gaze.append(float(split_data[4])) #用thread庫實現多線程 #由於主線程退出時,子線程自動中止,因此需要join;由於thread庫未提供join方法,所以需要自己手動實現。 #thread.start_new_thread(show_heat_map,(x_head,y_head,1)) #thread.start_new_thread(show_heat_map,(x_gaze,y_gaze,2)) #用threading庫實現多線程 #threading庫提供了join方法。但是由於matplotlib.pyplot中的方法都是全局的,因此用多線程繪圖會有錯誤:RuntimeError: main thread is not in main loop #head_thread=Thread(target=show_heat_map, args=(x_head,y_head,1,)) #gaze_thread=Thread(target=show_heat_map,args=(x_gaze,y_gaze,2,)) #head_thread.start() #gaze_thread.start() #head_thread.join() #gaze_thread.join() #用multiprocessing實現多進程 head_process=Process(target=show_heat_map,args=(x_head,y_head,1,)) gaze_process=Process(target=show_heat_map,args=(x_gaze,y_gaze,2,)) head_process.start() gaze_process.start() head_process.join() gaze_process.join() def show_heat_map(x,y,n): #pdb.set_trace() fig=plt.figure(n) plt.hist2d(x,y,bins=100) plt.grid(True) plt.colorbar() #fig.savefig('%02i.png'%n) plt.show() if __name__=='__main__': generate_heat_array(0)
繪制熱力圖的方法:
plt.hist2d(x,y,bins=100)
x為橫軸的值的list,y為縱軸值的list
修改bins可以控制區間大小
參考:http://blog.topspeedsnail.com/archives/707
使用meshgrid+imshow的話橫縱坐標會有問題