Matplotlib的subplot畫圖, 共享colorbar


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)

 

畫圖結果:

 


免責聲明!

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



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