天天看点

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。

如果有大佬直到怎么快捷解决这个办法,麻烦告知一下。

还有没解决的问题是,怎么把刻度标签居中。