从seaborn clustermap结果中重新排序高级集群

2023-12-26

有没有办法从a to b下图中有脚本吗?我在用seaborn.clustermap()到达,得到a(即保留行的顺序。但是,列顺序仅在第二最高级别更改)。

I was wondering whether it is possible to use the seaborn.matrix.ClusterGrid that is returned by seaborn.clustermap(), modify it and plot the modified results. enter image description here b P.S. The reason I am asking this is that the order has a meaning (first comes blue, next green, and finally red).

Update:下面是一个小数据集生成的情况:

df = pd.DataFrame([[1, 1.1, 0.9, 1.9, 2, 2.1, 2.8, 3, 3.1], 
                   [1.8, 2, 2.1, 0.7, 1, 1.1, 2.7, 3, 3.3]],
              columns = ['d1', 'd2', 'd3', 
                         'l3', 'l2', 'l1', 
                         'b1', 'b2', 'b3'],
              index = ['p1', 'p2'])

cg = sns.clustermap(df); ## returns a ClusterGrid

输出是这样的:

我们可以想到以以下开头的列b作为早餐,l作为午餐和d作为晚餐。现在,命令是breakfast -> dinner -> lunch。我想去breakfast -> lunch -> dinner.


这就是我解决问题的方法。它可以工作,但可能并不像人们希望的那样优雅!

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage, dendrogram

# set the desired order of groups eg: breakfast, lunch, dinner
groups = ['b', 'l', 'd'] 

# reorder indexes/indices besed on the desired order
new_order = []
for group in groups:
    indexes = cg.data2d.columns.str.startswith(group)
    indexes_locs = np.where(indexes)[0].tolist()
    new_order += indexes_locs
    
## reorder df based on the new order
ordered_df = cg.data2d.iloc[:, new_order]

## Run clustermap on the reordered dataframe by disabling 
## the clustering for both rows and columns
ocg = sns.clustermap(ordered_df, 
                     row_cluster=False, 
                     col_cluster=False,
                    );

## draw dendrogram x-axis
axx = ocg.ax_col_dendrogram.axes
axx.clear()

with plt.rc_context({'lines.linewidth': 0.5}):
    
    link = cg.dendrogram_col.linkage ## extract the linkage information

    ## manualy inspect the linkage and determine the new desired order
    link[[4, 2]] = link[[2, 4]]  ## swaping the two groups of higher hierarchy
    
    ## draw the the dendrogram on the x-axis
    dendrogram(link, 
           color_threshold=0, 
           ax=axx,
           truncate_mode='lastp',
           orientation='top',
           link_color_func=lambda x: 'k'
          );

axx.set_yticklabels(['']*len(axx.get_yticklabels()))
axx.tick_params(color='w')
    
## draw dendrogram y-axis (no chage here)
axy = ocg.ax_row_dendrogram.axes
axy.clear()

with plt.rc_context({'lines.linewidth': 0.5}):
    
    ## draw the the dendrogram on the y-axis
    dendrogram(cg.dendrogram_row.linkage, 
           color_threshold=0, 
           ax=axy,
           truncate_mode='lastp',
           orientation='left',
           link_color_func=lambda x: 'k',
          );

axy.set_xticklabels(['']*len(axy.get_yticklabels()))
axy.tick_params(color='w')
# axy.invert_yaxis() # we might need to invert y-axis

The output looks like this: enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从seaborn clustermap结果中重新排序高级集群 的相关文章

  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 使用 PHP-EWS 访问另一个邮箱日历事件

    在 PHP EWS 库中 https github com jamesiarmes php ews https github com jamesiarmes php ews 我可以使用以下代码访问特定用户的日历事件 https github
  • 将编程语言嵌入到程序中[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以让滚动边距顶部在 Safari 中工作?

    我在锚点上使用滚动边距顶部来为我的粘性标题添加空间 但 Safari 不支持它 这些文档在这里 https developer mozilla org en US docs Web CSS scroll margin https devel
  • Kotlin 文档中未解决的@sample

    例如 当我检查 Kotlin 文档时Collections map Intellij Idea 无法解析文档中提到的参考 我应该向我的项目添加什么才能使其正常工作 这是一个错误 https youtrack jetbrains com is
  • 了解 Java 序列化

    我正在尝试比较标准的 Java 反序列化 并询问这是否是正确的方法 我写了以下课程 first 1234 1234 21341234 234123412341234124L fifth public class ArrayInputStre
  • 在Python中将图像文件转换为浮点数组

    如何将图像转换为浮点数数组 img cv2 imread img png 现在将 img 转换为 float 所以我得到 print img 0 0 类似于 4 0 2 0 0 0 而不是 4 2 0 你有好主意吗 非常感谢 您可以将整数列
  • Eclipse RCP - 优秀的 Eclipse Forms 教程/资源

    我正在寻找资源来学习如何在 Eclipse RCP 应用程序中有效使用 Eclipse 表单 我试图在 Indigo 上使用最新的 SWT Window Builder 插件 但这种方式构建表单对我来说并不适用 例如 不能将任何内容放入可扩
  • SSL 错误:无效或自签名证书 - Magento 产品中的图像上传

    I get SSL Error Invalid or self signed certificate将图像上传到产品时出错 我能够轻松将图像上传到类别 但我无法将图片上传到产品 是的 请不要标记为重复 我已经检查过了Magento 上传图像
  • 如何在 Windows 上使用 clang 和 mingw-w64 标头

    我有 clang 3 9http llvm org releases 3 9 0 LLVM 3 9 0 win32 exe http llvm org releases 3 9 0 LLVM 3 9 0 win32 exe clang ve
  • 在两个 ASM GCC 内联块之间传播进位位

    亲爱的汇编 C 开发人员 问题是 即使它有效 在两个 ASM 块之间传播进位 或任何标志 是现实的还是完全疯狂的 几年前 我开发了一个用于低于 512 位 在编译时 的大型算术的整数库 我当时没有使用 GMP 因为对于这种规模 由于内存分配
  • 使用正则表达式时如何保留分隔符?

    我做了一个关于标点符号和正则表达式的问题 但很混乱 假设我有这样的文字 String text wor d1 word2 wo rd3 word4 我正在这样做 String parts text split 我有这个 wor d1 wor
  • 为什么Spring在处理端点异常时将RuntimeException包装在NestedServletException中?

    根据Servlet 规范 https jcp org en jsr detail id 340 servlet 或过滤器可能会在执行期间抛出以下异常 请求的处理 运行时异常或错误 ServletException 或其子类 IOExcept
  • MCMCglmm 中 “trait” 的意思

    Like in 这个帖子 https stats stackexchange com questions 156683 when and why do i have to use trait for multinomial multilev
  • 使用子图的 Pandas 条形图

    我正在使用 pandas 创建条形图 这是一个例子 df pd DataFrame np random rand 10 4 columns a b c d df plot kind bar 我想在一个图中绘制两个子图 并在一个条形图上绘制
  • 获取其他类中的变量

    我需要获取变量inString在其他班级 我怎样才能做到这一点 public class main public static StringBuffer inString public static void main String arg
  • 为什么IE9+、Chrome和Opera15+浏览器在用户代理中将自己标识为Mozilla?

    我正在寻找一种用 JavaScript 识别 IE 的方法 突然 我注意到浏览器被识别为 Mozilla Opera Mozilla 5 0 Windows NT 6 1 WOW64 AppleWebKit 537 36 KHTML 如 G
  • 如何在 Python 中使用 mv 命令与子进程

    我在 home somedir subdir 中有很多文件 我试图以编程方式将它们全部移动到 home somedir 现在我有这个 subprocess call mv home somedir subdir somedir 但它给了我这
  • 动态转发:抑制不完整实施警告

    我有一个公开一些方法的类 其实现由内部对象提供 我使用前向调用在运行时分派对内部对象的方法调用 但 XCode 抱怨 因为它找不到声明的方法的实现 我在 SO 上发现了一些其他类似的问题 但所有这些问题都通过设计更改得到了解决 我无意在这里
  • 当条件为假时如何跳过批处理步骤

    我有一项基本工作和一个基本步骤 该作业每 x 秒执行一次 我为此使用石英 然后在我的配置类中我还有变量 runStep 我应该在哪里添加此属性并仅在 runStep 为 true 时运行我的步骤
  • 从seaborn clustermap结果中重新排序高级集群

    有没有办法从a to b下图中有脚本吗 我在用seaborn clustermap 到达 得到a 即保留行的顺序 但是 列顺序仅在第二最高级别更改 I was wondering whether it is possible to use