我有四个5x5矩阵,我想与一个“原始”的-matrix进行比较。我计算了每个矩阵的误差,这导致了一个新的5x5矩阵,该矩阵对每个条目都有百分比误差。
例如: Matrix_W
Ac Bc Cc Dc Ec
Ar 0.04 0.03 0.02 0.05 0.06
Br 0.01 0.02 0.04 0.02 0.01
Cr 0.03 0.05 0.09 0.08 0.01
Dr 0.07 0.09 0.05 0.03 0.01
Er 0.01 0.03 0.05 0.05 0.08(r为行,c为栏)
我将其中四个矩阵存储在熊猫DataFrame中:
Ac Bc Cc Dc Ec rowValue mType
0.04 0.03 0.02 0.05 0.06 Ar W
0.01 0.02 0.04 0.02 0.01 Br W
0.03 0.05 0.09 0.08 0.01 Cr W
0.07 0.09 0.05 0.03 0.01 Dr W
0.01 0.03 0.05 0.05 0.08 Er W
0.04 0.04 0.03 0.01 0.02 Ar X
0.09 0.07 0.05 0.04 0.01 Br X
0.01 0.02 0.06 0.05 0.07 Cr X
……
0.06 0.08 0.04 0.03 0.09 Er Z现在,我想创建一个5x5散点图矩阵,使用海运绘制四个矩阵中每个矩阵的误差。与此类似,只有5列和5行:

因此,散点图矩阵的单元格0,0 (左上角)应显示四个矩阵的位置Ac、Ar的误差图。散点图矩阵的x轴和y轴是独立的: x_vars = Ac到Ec,y_vars= Ar到Er。hue应该依赖于mType变量。
以下代码没有导致所需的输出:
Import Seaborn as sns
g = sns.PairGrid(df, x_vars=df.columns[:-2], y_vars=df[‚rowValue‘], hue=df[‚mType‘])
g.map(sns.scatterplot)我得到的结果是一个20x5矩阵,它似乎没有独立的x和y轴。我不确定问题是我是如何在DataFrame中存储数据,还是为了达到预期的结果,我必须事先做的其他事情。任何帮助都是非常感谢的!
发布于 2021-08-12 11:48:12
你不能做你描述的那样:为了绘制一个散点图,你需要两个变量,一个是x轴,一个是y轴。使用您的数据集,您将得到一个5x5的子图网格,每个子图将包含4个点(每个mType一个),但是其他哪些变量决定了这4个点在该子图中的位置?
我建议你换个办法。
您可以绘制4个不同的5x5热图,每个mType一个。这些热图的每个单元格都有基于其值的颜色。
完整代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from string import ascii_uppercase
# user input
np.random.seed(42)
matrix_size = 5
matrices = ['W', 'X', 'Y', 'Z']
# dataframe creation
n_matrix = len(matrices)
row_labels = [f'{lecter}r' for lecter in ascii_uppercase[:matrix_size]]
col_labels = [f'{lecter}c' for lecter in ascii_uppercase[:matrix_size]]
df = pd.DataFrame({'mType': np.repeat(matrices, matrix_size),
'rowValue': n_matrix*row_labels})
for col in col_labels:
df[col] = 0.05 + 0.01*np.random.randn(matrix_size*n_matrix)
# plotting
fig, ax = plt.subplots(1, n_matrix, figsize = (5*n_matrix, 5))
for i, mtype in enumerate(df['mType'].unique(), 0):
cbar = False if i != n_matrix - 1 else True
sns.heatmap(ax = ax[i],
data = df.loc[df['mType'] == mtype, col_labels],
vmin = 0.02,
vmax = 0.08,
annot = True,
cbar = cbar,
cmap = 'Spectral_r')
ax[i].tick_params(left = False, bottom = False)
ax[i].set_yticklabels(df['rowValue'].unique())
ax[i].set_title(mtype)
plt.show()对于任意数目的矩阵和任意矩阵的大小,上述代码都是广义的。
在您的情况下(4个矩阵,大小为5):

https://stackoverflow.com/questions/68752880
复制相似问题