首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海运PairPlot绘制每个条目的矩阵误差

海运PairPlot绘制每个条目的矩阵误差
EN

Stack Overflow用户
提问于 2021-08-12 06:53:40
回答 1查看 255关注 0票数 2

我有四个5x5矩阵,我想与一个“原始”的-matrix进行比较。我计算了每个矩阵的误差,这导致了一个新的5x5矩阵,该矩阵对每个条目都有百分比误差。

例如: Matrix_W

代码语言:javascript
复制
     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中:

代码语言:javascript
复制
 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变量。

以下代码没有导致所需的输出:

代码语言:javascript
复制
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中存储数据,还是为了达到预期的结果,我必须事先做的其他事情。任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-12 11:48:12

你不能做你描述的那样:为了绘制一个散点图,你需要两个变量,一个是x轴,一个是y轴。使用您的数据集,您将得到一个5x5的子图网格,每个子图将包含4个点(每个mType一个),但是其他哪些变量决定了这4个点在该子图中的位置?

我建议你换个办法。

您可以绘制4个不同的5x5热图,每个mType一个。这些热图的每个单元格都有基于其值的颜色。

完整代码

代码语言:javascript
复制
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):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68752880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档