多進程使用matplotlib.pyplot繪heatmap(多線程不可以)


數據格式如下:

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的話橫縱坐標會有問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM