如何通过python中的热图减法显示两个矩阵的差异?

我有两个矩阵[A](Expected_matrice),[B](Predicted_matrice)我需要通过减去它们来创建第三个[C](Error_matrice)[C] = [A] – [B]并将其传递给Pandas数据帧并保存在csv文件中.

由于上述矩阵的大小为24 * 20,我试图:

第一:通过sns.heatmap绘制[C](C,cbar = True,cmap =“gray_gist”)

第二:通过应用和(abs(abs([A]) – abs([B]))/ 24 * 20来评估[C]以检查它有多好.实际上我用它来计算误差量.我也知道可以通过应用以下方法使用Sklearn导入指标中的其他方法(如MSE):

from Sklearn import metrics
print(metrics.mean_squared_error(A,B))

由于矩阵的元素是我用过的列表:[i – j for(i,j)in zip(A,B)]

我的代码如下:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.ndimage.filters import gaussian_filter

#A,B can be read from .csv files
A = pd.read_csv('D:\A.csv', header=None)
B = pd.read_csv('D:\B.csv', header=None)

#A,B can be assumed as lists
df_A = pd.DataFrame(A)
df_B = pd.DataFrame(B)

#calculate error matrix via subtraction 
C = [i - j for (i, j) in zip(A,B)]

#Pass error matrix to Pandas dataframe
df_C = pd.DataFrame(C)
df_C.to_csv('Error_Matrix.csv', header=None, index=None)

#Evaluation
Eval= sum(abs(abs([A])-abs([B])))/24*20
Eval_ =  '{:04}'.format(Eval)
print(Eval_)

#Plotting C
fig, ax = plt.subplots(nrows=1, ncols=2 , figsize=(20,15))

plt.subplot(1,2,1)
ax = sns.heatmap(C, cbar=True, cmap="gist_gray")
plt.title(f'Error Matrix  Error={Eval_}', fontsize=14 , fontweight='bold', color='black', loc='center', style='italic')
plt.axis('off')

plt.subplot(1,2,2)
C_smooth = gaussian_filter(dfr_b, sigma=1)
ax = sns.heatmap(C_smooth, vmin=np.min(C_smooth), vmax=np.max(C_smooth), cmap ="gray" , cbar=True , cbar_kws={"ticks":[0,33,67,100]})
plt.title(f'Error Matrix Smooth  Error={Eval_}', fontsize=14 , fontweight='bold', color='black', loc='center', style='italic')
plt.axis('off')
plt.savefig('Error_Matrix.png') 
plt.show()

预期成绩:

注意白色显示错误= 0,纯黑色显示错误=最大值.
大多数应该是错误,但我不希望有黑色的结果我预计灰色主要是.

数据(矩阵A,B):Matrix A,Matrix B

解决方法:

我会做这样的事情:

import matplotlib.pyplot as plt
import numpy as np


mx = 10 + 3 * np.random.random( 20 * 10 )
mx = mx.reshape( 20, 10 )
nx = 10 + 3 * np.random.random( 20 * 10 )
nx = nx.reshape( 20, 10 )
deltax = mx - nx
ox = 100 * ( 1 - np.abs( ( deltax) / mx ) )

scale = max( [ abs(min( np.concatenate( deltax ) ) ), abs( max( np.concatenate( deltax ) ) ) ] )

chi2 = np.sum( mx - nx )**2
chi2Red = chi2/( len( mx ) * len( mx[0] ) )
print chi2, chi2Red

fig = plt.figure()
ax = fig.add_subplot( 2, 2, 1 )
bx = fig.add_subplot( 2, 2, 2 )
cx = fig.add_subplot( 2, 2, 3 )
dx = fig.add_subplot( 2, 2, 4 )

MX1 = ax.matshow( mx, vmin=0, vmax=30 )
MX2 = bx.matshow( nx, vmin=0, vmax=30 )
diffMX = cx.matshow( deltax, cmap='seismic', vmin=-scale, vmax=scale )
errMX = dx.matshow( ox, vmin=0, vmax=100  )
plt.colorbar( MX1, ax=ax )
plt.colorbar( MX2, ax=bx )
plt.colorbar( diffMX, ax=cx )
plt.colorbar( errMX, ax=dx )
plt.show()

赠送:

>> 219.40945851846487 1.0970472925923245

如何通过python中的热图减法显示两个矩阵的差异?

我不得不说,我不喜欢丢失有关偏差迹象的信息.因此,左下图是我的实际偏好.它可以像最后一个一样进行缩放和移动,使零变为100%,数据范围从80%到120%或者有点像.

上一篇:如何在python中创建从绿色到红色的热图?


下一篇:我如何创建基于热图的值(而不是频率)?