天天看點

python 相關矩陣圖,相關系數計算相關矩陣熱力圖。

先放全部代碼:

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()
           
python 相關矩陣圖,相關系數計算相關矩陣熱力圖。

需要注意的是,heatmap需要dataframe格式的資料,可以通過生成dic轉化成dataframe。

需要注意的是,生成的dataframe生成矩陣的時候不是按照列來的。雖然熱力圖中是2×2,但顯然dataframe是42×2,是以需要考慮一下将資料轉置輸入dic。

如果有大佬直到怎麼快捷解決這個辦法,麻煩告知一下。

還有沒解決的問題是,怎麼把刻度标簽居中。