使用 ggplot2 再现格子树状图

2024-03-01

这可以用 ggplot2 重现这个格子图吗?

library(latticeExtra)
data(mtcars)
x  <- t(as.matrix(scale(mtcars)))
dd.row <- as.dendrogram(hclust(dist(x)))
row.ord <- order.dendrogram(dd.row)

dd.col <- as.dendrogram(hclust(dist(t(x))))
col.ord <- order.dendrogram(dd.col)

library(lattice)

levelplot(x[row.ord, col.ord],
      aspect = "fill",
      scales = list(x = list(rot = 90)),
      colorkey = list(space = "left"),
      legend =
      list(right =
           list(fun = dendrogramGrob,
                args =
                list(x = dd.col, ord = col.ord,
                     side = "right",
                     size = 10)),
           top =
           list(fun = dendrogramGrob,
                args =
                list(x = dd.row,
                     side = "top",
                     size = 10))))

EDIT

从 2011 年 8 月 8 日起ggdendro软件包可在CRAN http://cran.r-project.org/web/packages/ggdendro/index.html另请注意,树状图提取函数现在称为dendro_data代替cluster_data


是的。但目前你必须克服一些困难:

  1. 安装ggdendro包(可从 CRAN 获得)。该包将从几种类型的聚类方法(包括Hclust and dendrogram)的明确目的是绘制ggplot.
  2. 使用网格图形创建视口并对齐三个不同的绘图。

代码:

首先加载库并设置 ggplot 的数据:

library(ggplot2)
library(reshape2)
library(ggdendro)

data(mtcars)
x <- as.matrix(scale(mtcars))
dd.col <- as.dendrogram(hclust(dist(x)))
col.ord <- order.dendrogram(dd.col)

dd.row <- as.dendrogram(hclust(dist(t(x))))
row.ord <- order.dendrogram(dd.row)

xx <- scale(mtcars)[col.ord, row.ord]
xx_names <- attr(xx, "dimnames")
df <- as.data.frame(xx)
colnames(df) <- xx_names[[2]]
df$car <- xx_names[[1]]
df$car <- with(df, factor(car, levels=car, ordered=TRUE))

mdf <- melt(df, id.vars="car")

提取树状图数据并创建绘图

ddata_x <- dendro_data(dd.row)
ddata_y <- dendro_data(dd.col)

### Set up a blank theme
theme_none <- theme(
  panel.grid.major = element_blank(),
  panel.grid.minor = element_blank(),
  panel.background = element_blank(),
  axis.title.x = element_text(colour=NA),
  axis.title.y = element_blank(),
  axis.text.x = element_blank(),
  axis.text.y = element_blank(),
  axis.line = element_blank()
  #axis.ticks.length = element_blank()
)

### Create plot components ###    
# Heatmap
p1 <- ggplot(mdf, aes(x=variable, y=car)) + 
  geom_tile(aes(fill=value)) + scale_fill_gradient2()

# Dendrogram 1
p2 <- ggplot(segment(ddata_x)) + 
  geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) + 
  theme_none + theme(axis.title.x=element_blank())

# Dendrogram 2
p3 <- ggplot(segment(ddata_y)) + 
  geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) + 
  coord_flip() + theme_none

使用网格图形和一些手动对齐来定位页面上的三个图

### Draw graphic ###

grid.newpage()
print(p1, vp=viewport(0.8, 0.8, x=0.4, y=0.4))
print(p2, vp=viewport(0.52, 0.2, x=0.45, y=0.9))
print(p3, vp=viewport(0.2, 0.8, x=0.9, y=0.4))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ggplot2 再现格子树状图 的相关文章

  • OpenStreetMap 不显示在 RStudio 中(使用 R 3.2.1)

    我正在使用来自的代码here https rstudio github io leaflet library leaflet m lt leaflet gt addTiles gt addMarkers lng 174 768 lat 36
  • R 监督潜在狄利克雷分配包

    我在用着这个LDA包 https cran r project org web packages lda 对于 R 具体来说 我正在尝试做监督潜在狄利克雷分配 slda https www cs princeton edu blei pap
  • ggplot2中的两列分组

    是否可以按两列分组 于是叉积就画出来了 经过geom point and geom smooth 例如 frame lt data frame series lt rep c a b 6 sample lt rep c glass wate
  • 使用 xtable 对乳胶输出的表进行排序

    我正在尝试生成一个排序表并导出到乳胶中 然而 xtable 似乎无法处理排序表 建议 a lt sample letters 500 replace T b lt table a c lt sort table a decreasing T
  • do.call 的 envir 选项如何工作?

    的文档do call states If quote is FALSE 默认值 然后对参数进行求值 在调用环境中 而不是在envir 这句话向我暗示 当quote FALSE 指定envir没有什么区别 然而 事实并非如此 事实上我遇到过需
  • 缩放geom_密度以将geom_bar与y上的百分比相匹配

    因为我对数学感到困惑上次我尝试问这个问题 https stackoverflow com questions 32412805 ggplot2 histogram with density curve that sums to 1 这是另一
  • “条件长度 > 1 并且仅使用第一个元素”错误

    我对 f 语句有疑问 因为它返回给我以下错误消息 条件长度 gt 1 并且仅使用第一个元素 我有一个名为 data summary 的数据框 我想创建两个新变量vol up and vol down取决于我的数据框的其他变量 这是我的脚本代
  • 使用 sprintf 打印换行符 - 有光泽

    我试图在打印时进行换行 这是我的代码 temp lt LETTERS 1 11 print sprintf Rank s s n 1 11 temp output 1 Rank 1 A n Rank 2 B n Rank 3 C n Ran
  • 将 r 中的一列从出生日期更改为年龄

    我是第一次使用 data table 我的表中有大约 400 000 个年龄的列 我需要将它们从出生日期转换为年龄 做这个的最好方式是什么 我一直在思考这个问题 到目前为止对这两个答案都不满意 我喜欢用lubridate 就像 KFB 所做
  • 在 mutate pipeline 中按组获取唯一 ID [重复]

    这个问题在这里已经有答案了 自从新的 dplyr v1 0 0 更新发布以来 我注意到该功能group indices 有 已弃用 我在工作中经常使用这个功能 并且我喜欢在mutate 例如使用dplyr v0 8 3我能够非常轻松地做这样
  • 为什么我在 R 向量的类别中看到“整数”而不是“向量”

    为什么从数据框中切片的列的数据类型显示为 整数 而不是 向量 df lt data frame x 1 3 y c a b c x y 1 1 a 2 2 b 3 3 c c1 lt df 1 1 1 2 3 class c1 1 inte
  • 从 r 中的多个列表创建二进制(存在/不存在)数据矩阵

    我有一系列不同长度的单独变量列表 字符串 我想将它们组合成一个数据帧以形成存在 1 不存在 0 矩阵 鉴于它们的长度不同 我什至不知道如何创建初始数据框 这是我的例子 data1 lt c a b c d e f data2 lt c e
  • 使用 R 数学独立库使用 C++ 编写矩阵/向量?

    All 我一直在使用 C 中的 R 数学独立库 我非常喜欢能够生成随机数并使用我熟悉的 R 分布函数 我的问题是 是否可以使用 R 中可用的矩阵运算 乘法 转置 逆 Chol 等 一个独立的库 我在 Rmath h 中没有看到它们 如果矩阵
  • 按值对 geom_bar ggplot2 中的条形重新排序

    我正在尝试制作一个条形图 其中的图是从miRNA与最高的value to the miRNA与最低的 为什么我的代码不起作用 gt head corr m miRNA variable value 1 mmu miR 532 3p pos
  • 词云中的空格

    我目前将 wordle 用于词云的许多艺术用途 我认为 R 的词云可能具有更好的控制能力 1 如何在词云中保持单词大写 解决了 2 如何将两个单词作为一个块保留在词云中 wordle 使用 运算符来完成此操作 R 的词云仅按原样打印 例如
  • 相对于时间求平均值

    我有以下带有日期时间和相应值的数据集 时间间隔为每10分钟一次 我需要以 15 分钟的间隔生成新行 例如 15 40 的值为 599 15 50 的值为 594 因此需要在两者之间生成一个新行 即 15 45 的平均值为 599 和 594
  • 使用条件求 R 中的累积和

    我需要创建一个新变量 其中包含每个 ID 过去三年金额的总和 如果没有三年的数据 则应显示 NA 举个例子 ID YEAR AMOUNT 1 2010 5 1 2011 2 1 2012 4 1 2013 1 1 2014 3 2 2013
  • 将值排列在特定组内

    我试图在嵌套数据帧的精确组内按降序排列值 我的输入数据如下所示 我有两个分组变量 group1 and group2 和三个值 即id value2 value3 library tidyverse set seed 1234 df lt
  • R 语言 NaN + NA 行为

    我有一个关于 R 中算术行为的问题 看下面这段代码 gt NaN NA 1 NaN gt gt gt NaN as integer NA gt NA 所以 我很困惑这两个添加给出了不同的结果 有谁知道这是否是真正想要的行为还是只是某种错误
  • 使用 dplyr 创建 t.test 表?

    假设我有如下所示的数据 set seed 031915 myDF lt data frame Name rep c A B times c 10 10 Group rep c treatment control treatment cont

随机推荐

  • Google 搜索查询中参数的含义? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有关于 Google 查询中的参数含义的资源 有没有分析过 Google 搜索页面的内部运作方式 例子是 http www googl
  • 如何使用eclipse进行C#开发? [复制]

    这个问题在这里已经有答案了 可以使用eclipse进行C 开发吗 如果可以的话 该怎么办呢 您最喜欢的组合是什么 虽然我见过一些半成品的插件 但我不相信有任何东西可以做到这一点close到 Eclipse 中的 Java 工具 如果您使用的
  • 使用 jquery-1.4.1.js 访问被拒绝

    我正在使用 VS2010 和 jquery 1 4 1 js 版本 我尝试访问 WCF 服务 但出现奇怪的错误 访问被拒绝 in jquery 1 4 1 js在页码处4982 jquery 1 4 1 js Open the socket
  • 清除控制台缓冲区

    我正在 VS2008 中编写一个示例控制台应用程序 现在我有一个Console WriteLine 在屏幕上显示输出的方法 然后有Console ReadKey 等待用户结束应用程序 If I press Enter while the C
  • 如何从服务类调用组件方法 - Angular

    我试图从服务类调用组件方法 但收到类似 错误类型错误 无法读取未定义的属性 测试 的错误 但是我遇到了类似的问题 但主要解释了组件到组件的调用 所以我没有正确理解 例子 测试组件 ts Component selector componen
  • 考虑到指令具有不同的长度,CPU 如何知道下一条指令应该读取多少字节?

    所以我正在读一篇论文 其中他们说静态反汇编二进制代码是不可判定的 因为一系列字节可以用多种可能的方式表示 如图所示 其 x86 所以我的问题是 那么CPU是如何执行这个的呢 例如 在图中 当我们到达 C3 之后时 它如何知道下一条指令应该读
  • 如何动态覆盖__setitem__? (无子类)

    我无法覆盖某些内置函数 例如 setitem Python2 7 虽然我测试的之前版本也出现同样的情况 虽然我知道这很容易通过子类化来完成 但这不是我想要的 我需要能够动态地重写这些方法 显然 当我的班级是 的子类时object 被重写的方
  • iOS Swift:将打印和调试打印写入文件

    晚上 是否可以将所有打印和调试打印保存在文件中 我想要记录我的应用程序所做的事情 即使它不是从 Xcode 启动的 我正在考虑重写 print 和 debugPrint 方法并将输入写入文件 Thanks Swift 标准库中有以下方法 f
  • ConvergenceWarning:lbfgs 未能收敛(状态 = 1):停止:总数迭代次数达到限制

    我有一个由数字和分类数据组成的数据集 我想根据患者的医疗特征预测患者的不良结果 我为我的数据集定义了一个预测管道 如下所示 X dataset drop columns target y dataset target define cate
  • 在空行上将文本文件拆分为字符串

    我想读取本地的一个txt文件 读取这个文件中的文本 之后 我想将整个文本拆分为字符串 如下例所示 例子 可以说文件包含 abcdef ghijkl aededd ededed ededfe efefeef efefeff 我想将此文本拆分为
  • Mingw64-w64 属性(格式)和 标头

    交叉编译时 我在让 cinttypes 在 mingw64 w64 上正常工作时遇到严重问题 我已经将其简化为在 docker 中运行的最小示例 inttypes test cpp include
  • XNA:当前顶点声明不包括当前顶点着色器所需的所有元素。 Normal0 缺失

    嘿 我遇到了一点麻烦 我使用 xna 已经有一段时间了 但我对 3D 完全陌生 我正在逐字跟踪 msdn 网站上 winformsgraphicsdevice 示例中的代码 它有一个可以在屏幕上绘制一个原始三角形的控件 就这么简单 但我在这
  • Safari 未检测到我的扩展证书

    我已注册 Safari 开发计划并拥有有效的 Apple ID 我已按照Apple提供的所有步骤进行操作 问题是 Windows XP Service Pack 2 无法识别命令 certreq 而说明表明它可以在任何 Windows 计算
  • 使用 UNIX 机器文件和目录选项卡自动完成的 Windows 应用程序

    Unix Linux 支持按 tab 时自动完成文件和目录 我需要在我的 Windows 应用程序中创建此功能 我有一个用于用户输入文件名的文本字段 我想响应 制表符 按下 就像我们在 Unix 控制台中一样 如果有一个选项 自动完成 一些
  • 移动网站检测服务器端与客户端

    谁能推荐检测移动设备访问网站的最佳方法 我们希望重定向到移动版本 而不是由于 CMS 限制而重新设计现有页面 我们还需要能够根据要求在移动设备上返回完整网站的选项 我们有一个 net 服务器 但不是 net 开发人员 因此必须为服务器端完成
  • 是否可以使用 EclipseLink 输出生成的 SQL,而无需增加日志详细程度?

    我想在开发过程中将 EclipseLink 生成的 SQL 输出到控制台 但是 我只能使用日志记录级别 FINE 来执行此操作 我有一个由许多类组成的复杂域模型 当日志详细程度处于 FINE 级别时 部署会花费相当多的时间 因为 Eclip
  • C# Mongodb 多个对象数组文档的笛卡尔积

    尝试使用 C Linq 甚至原始 Mongodb 查询本身来了解如何将多个数组连接为笛卡尔积 举例来说 我有一个集合 我将其过滤为以下两个文档 movie starwars showday monday movie batman showd
  • 为什么 ng build 在 azure DevOps 上失败?

    我正在尝试使用 Azure DevOps 进行 CI CD 但以下任务失败 这是 package json 文件信息 scripts ng ng start ng serve build ng build prod 这是错误消息 我尝试删除
  • 如何在 Ubuntu 中增加 Neo4j 的最大文件打开限制(ulimit)?

    现在ulimit n shows 10000 我想增加到40000 我编辑了 etc sysctl conf 并放入fs file max 40000 我也编辑过 etc security limits conf并更新了硬值和软值 但仍然显
  • 使用 ggplot2 再现格子树状图

    这可以用 ggplot2 重现这个格子图吗 library latticeExtra data mtcars x lt t as matrix scale mtcars dd row lt as dendrogram hclust dist