1.数据来源于excel,是一个7*5的矩阵
首先导入相应的包,读取excel
import os
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import seaborn as sns
from PIL import Image as ImagePIL, ImageFont, ImageDraw#设置保存图片的dpi
df = pd.read_excel(r"333.xlsx",sheet_name='##') #相应的文件位置
!![df的形式]
2 图对应的横纵坐标,组成list;表中的数字为datafram形式,转换成二维数组
#纵坐标标签
list=[]
for i in range(df.shape[0]):
list.append(df['R2'][i])
row=list
#横坐标标签
df.columns.values[1:]
#dataframe转化成二维矩阵
df_array=df.iloc[:,1:].values
![在这里插入图片描述]
3.画图`
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
#创建一个画布
fig, ax = plt.subplots(figsize=(11,9))#设置画布大小
im=ax.imshow(df_array,cmap='Greys',aspect='auto')#cmap='Greys'),设置热力图颜色,一般默认为蓝黄色,aspect='auto'热力块大小随着画布大小自动变化,如果不设置的话为方框。
#create colorbar色条
cbar=ax.figure.colorbar(im, ax=ax)
#colorbar的设置
cbar.ax.set_ylabel('score', rotation=-90, va="bottom",fontsize=18,fontname='Times New Roman')#colorbar标签为‘score’,纵向放置,字体大小为18,字体为新罗马字体
#color色条本身上刻度值大小及字体设置
cbar.ax.tick_params(labelsize=10)
cbarlabels = cbar.ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in cbarlabels]
#热力图设置
ax.set_xticks(np.arange(len(df.columns.values[1:])))
ax.set_yticks(np.arange(len(row)))
#用各自的列表项来标记他们
ax.set_xticklabels(df.columns.values[1:])
ax.set_yticklabels(row)
#关闭网格并用白色加宽网格
for edge, spine in ax.spines.items():
spine.set_visible(False)
ax.set_xticks(np.arange(column+1)-.5, minor=True)
ax.set_yticks(np.arange(len(row)+1)-.5, minor=True)
ax.grid(which="minor", color="w", linestyle='-', linewidth=3)
ax.tick_params(which="minor", bottom=False, left=False)
#添加每个热力块的具体数值,保留两位小数
for i in range(df.shape[0]):
for j in range(1,df.shape[1]):
text = ax.text(j-1,i,df.iloc[i,j].round(2),ha="center", va="center", color="w",fontsize=12,fontname='Times New Roman')
#设置图例并且设置图例的字体及大小
#设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=15)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
#设置横纵坐标的名称及热力图名称以及对应字体格式
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size' : 20,
}
#横纵轴的名称
plt.xlabel('round',font1)
plt.ylabel('value',font1)
#热力图名称
ax.set_title('DX model score',font1)
#图的输出
#将文件保存至文件中并且画出图,dpi设置高分辨率输出
plt.savefig('figure.eps',dpi=400)
fig.tight_layout()
plt.show()
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(r"E:\通量数据\数据分析\分参数模型分析\全部点分模型R2汇总.xlsx",sheet_name='当雄').set_index('R2')
fig, ax = plt.subplots(figsize = (9,9))
sns.heatmap(df,annot=True, vmax=1,vmin = 0.8, xticklabels= True, yticklabels= True, square=False, cmap=None)
plt.show()
![heatmap包绘图效果]
至于后续的字体调整等,等有时间再探索