首页 > 解决方案 > 熊猫:根据标签打印不同的颜色

问题描述

我有一个二进制矩阵(0 和 1 - 代表二分网络)保存到 pd 数据帧中。每行和每列都有一个标签(网络的模块):

df = pdDataFrame(Matrix, columns=cols, index=rows)

其中 cols 和 rows 是标签。

pd 看起来像这样:

在此处输入图像描述

我想以视觉方式打印矩阵:

G = np.zeros((N, M, 3))
G[df>0]=[0, 0, 0]
G[df==0]=[1, 1, 1]

如何根据标签更改颜色(不仅仅是黑色)?

标签: pythonpandas

解决方案


图是打印的好方法,其中有 1 用于可视化。对于标签,我根据您的评论进行了综合。

更新

  • 想要标签不相等的灰色
  • 需要一个自定义的颜色图,还需要lambda更新函数以生成将使用此颜色图的值
import seaborn as sns
import matplotlib.pylab as plt
import matplotlib as mpl
import pandas as pd
import numpy as np
N = 100

M = 200
# sparse binary matrix, p probability it's zero
p = 0.8
df = pd.DataFrame(np.random.choice([0,1], (M,N), p=(p, 1-p)),
                  # syntehsize column and row indexes as being labels 0 to 9
                  columns=sorted((list(range(10))*N)[0:N]),
                  index=sorted((list(range(10))*N)[0:M]))


# create the new map, forcing in grey for zero
cmap = mpl.colors.ListedColormap([(.8, .8, .8, 1.0)] + [plt.cm.jet(i) for i in range(plt.cm.jet.N-1)])

# 0 is grey... any other value comes from color map
ax = sns.heatmap(df.apply(lambda s: (s.name==s.index)*s*(s.index+1)), mask=df.eq(0), cmap=cmap )

在此处输入图像描述


推荐阅读