先放全部代碼:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import scipy.stats as ss
import seaborn as sns
import matplotlib
from pylab import *
matplotlib.rcParams['axes.unicode_minus']=False
mpl.rcParams['font.sans-serif'] = ['SimHei']
data_station = {
'1': [38, 202],
'2': [38, 202],
'3': [40, 202],
'4': [62, 202],
'5': [108, 202],
'6': [38, 202],
'7': [31, 123],
'8': [31, 123],
'9': [38, 123],
'10': [37, 123],
'11': [39, 123],
'12': [32, 123],
'13': [90, 316],
'14': [86, 316],
'15': [79, 316],
'16': [90, 316],
'17': [129, 316],
'18': [86, 316],
'19': [19, 60],
'20': [19, 60],
'21': [19, 60],
'22': [20, 60],
'23': [17, 60],
'24': [39, 60],
'25': [43, 175],
'26': [39, 175],
'27': [39, 175],
'28': [41, 175],
'29': [38, 175],
'30': [39, 175],
'31': [55, 142],
'32': [49, 142],
'33': [47, 142],
'34': [48, 142],
'35': [47, 142],
'36': [47, 142],
'37': [35, 139],
'38': [30, 139],
'39': [29, 139],
'40': [30, 139],
'41': [27, 139],
'42': [30, 139],
}
plt.figure(figsize=(5, 4)) # 設定圖檔尺寸,長比寬多一些
df3 = pd.DataFrame(data_station) # 需要生成dataframe格式
df4 = np.corrcoef(df3) # 生成相關系數矩陣
sns.heatmap(df4, vmin=-1, vmax=1, cmap=sns.color_palette('RdBu', n_colors=128), annot=True)
xx1 = [1, 2] # 設定刻度
labels = ['運作時間', '車站(站間距)'] # 刻度名稱
plt.xticks([index - 0.5 for index in xx1], labels, rotation='horizontal') # 讓刻度線在格子的中間
plt.yticks([index - 0.8 for index in xx1], labels, rotation='horizontal') # 沒找到讓文本居中的方法,是以智能靠平移讓視覺上看起來文本居中
plt.yticks(rotation=90) # 旋轉Y軸刻度
plt.show()

需要注意的是,heatmap需要dataframe格式的資料,可以通過生成dic轉化成dataframe。
需要注意的是,生成的dataframe生成矩陣的時候不是按照列來的。雖然熱力圖中是2×2,但顯然dataframe是42×2,是以需要考慮一下将資料轉置輸入dic。
如果有大佬直到怎麼快捷解決這個辦法,麻煩告知一下。
還有沒解決的問題是,怎麼把刻度标簽居中。