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