Python畫圖,利用Matplotlib中subplot畫3*3的heatmap圖,所有熱力圖共享一個colorbar。
import numpy as np import matplotlib matplotlib.use('AGG') import matplotlib.pyplot as plt import csv import pandas as pd fig, axs = plt.subplots(3, 3, sharex=True, sharey=True, constrained_layout=True, figsize=(6, 6)) fig.subplots_adjust(hspace=0.1) datasets = ['envi', 'enfr','enge'] types = ['enc', 'enc-dec' ,'dec'] Datasets = ['En-Vi', 'En-Fr','En-Ge'] def draw_map(ax,xlabels, ylabels, tt, attns, index): #畫熱力圖 im = ax.imshow(attns,interpolation='none', cmap='Blues', vmin=0, vmax=1) ax.set_title(tt, fontsize=10) style='italic' ) return im xlabels = '0 1 2 3 4 5'.split() ylabels = '5 4 3 2 1 0'.split() for i, data in enumerate(datasets): datafile = '{}.csv'.format(data) #讀取數據 data = pd.read_csv(datafile, delimiter='\t', header=None) for j, tt in enumerate(types): A = data.values[:,j*6:(j+1)*6] #取出所需熱力圖的數據 ax = axs[i, j] im = draw_map(ax, xlabels,ylabels, '%s (%s)'%(Datasets[i],tt), A, j) plt.xticks(range(len(xlabels)),xlabels) #設置橫坐標label plt.yticks(range(len(ylabels)),ylabels) #設置縱坐標label cb_ax = fig.add_axes([1.0, 0.1, 0.02, 0.8]) #設置colarbar位置 cbar = fig.colorbar(im, cax=cb_ax) #共享colorbar plt.tight_layout() plt.show() fig.savefig('weights_visualization.pdf', bbox_inches='tight', dpi=500)
畫圖結果: