Pandas:根据标签使用不同颜色打印

2024-09-28 20:53:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

其中cols和rows是标签

警察局是这样的:

enter image description here

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

  • 如果元素为0,则打印一个白点
  • 如果元素为1,则打印一个彩色点,颜色根据标签指定 我已经能够以二进制方式打印矩阵:
G = np.zeros((N, M, 3))
G[df>0]=[0, 0, 0]
G[df==0]=[1, 1, 1]

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


Tags: 模块数据网络元素df颜色方式二进制
1条回答
网友
1楼 · 发布于 2024-09-28 20:53:34

热图是打印的好方法,其中有一个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 )

enter image description here

相关问题 更多 >