python - 熊猫:根据标签打印不同的颜色
问题描述
我有一个二进制矩阵(0 和 1 - 代表二分网络)保存到 pd 数据帧中。每行和每列都有一个标签(网络的模块):
df = pdDataFrame(Matrix, columns=cols, index=rows)
其中 cols 和 rows 是标签。
pd 看起来像这样:
我想以视觉方式打印矩阵:
- 如果元素为0,则打印一个白点
- 如果元素为 1,则打印一个彩色点,根据标签分配颜色我已经能够以二进制方式打印矩阵:
G = np.zeros((N, M, 3))
G[df>0]=[0, 0, 0]
G[df==0]=[1, 1, 1]
如何根据标签更改颜色(不仅仅是黑色)?
解决方案
热图是打印点的好方法,其中有 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 )
推荐阅读
- php - 如何在 Laravel 中将用户 ID 设置为存储路径?
- python - 变量范围,不可变 vs 可变,以 += 表示
- expo - 如何阅读 Expo 独立应用程序的 TestFlight 崩溃日志
- java - 我不明白我们如何在方法 compareTo 中使用方法 compareTo
- django - PostgreSQL 全文搜索准确度
- c# - 统一拖动360视图相机
- sql - 更新项目是子查询一部分的字段
- swift - 将 DateComponents 数组设置为 UserDefaults 不起作用
- android-studio - 向应用程序添加菜单时遇到问题
- python - Python:在给定字符限制的情况下,将长文本拆分为字符串块