如何用ggplot对齐两个图?

2024-01-08

我试图使用对齐两个图grid但没有成功。我尝试调整主题,使绘图边框/大小相同,但尽管使用相同的 y 坐标,但绘图并未对齐。对于下面的例子我可以使用annotation_custom(网站上有一些示例)但这限制了我可以添加的文本数量。如有任何建议/修正/替代方案,我们将不胜感激。

我的丑代码

library(gridExtra)
library(ggplot2)

# Data
my.df<-data.frame(vars=paste("variable",letters[1:8],sep="-"),   
  est=seq(-0.2,0.5,0.1),ci.l=seq(-0.2,0.5,0.1)-0.5,ci.u=seq(-0.2,0.5,0.1)+0.5)
my.df$effect<-with(my.df,paste(round(est,1),"(",round(ci.l,2)," ,",round(ci.u,2),")"))                  


# Functions                  

gg.forrest<-function(data, x , y , ymin, ymax , opts=NULL)        {        
 my.min<-floor(data[[ymin]])
 my.max<-ceiling(data[[ymax]])

p<- ggplot(data, aes_string(x=x, y=y, ymin=ymin, ymax=ymax)) + 
    geom_pointrange() + 
    geom_hline(aes(x=0), lty=2) + 
    theme( axis.title.y=element_blank(),axis.ticks.y = element_blank(), axis.text.y=element_text(colour = "black")) +
   coord_flip() +
   theme(axis.text.y=element_text(hjust=0, size=15)) +
   theme( plot.margin = unit(c(1,2,1,1), "lines")) +
   theme(panel.border = element_blank()   ,panel.background = element_blank()) +
   geom_segment(aes_string(y=my.min,yend=my.max,x=0,xend=0))  + 
   opts

  p
} 



gg.forest.text<-function(data, x, label, opts=NULL) {  

  p<- ggplot(data, aes_string(x=0, y=x, label=label)) +  
     geom_text( hjust=0, size=4, colour="black") + 
#    coord_flip() +
     theme_bw() + 
     theme(panel.grid.major = element_blank(), panel.border = element_blank()) +
#    theme(axis.title=element_blank(),axis.ticks = element_blank(), axis.text=element_blank()) +
    theme( axis.ticks = element_blank()) +
   scale_x_continuous( "",breaks=c(0),labels=c(" ")) +
   scale_y_discrete("",breaks=c(0),labels=c(" ")) +
   theme(plot.margin = unit(c(1,1,1,-3), "lines")) +
   opts

  p
}


# Output
p<-gg.forrest(my.df , "vars" , "est" , "ci.l" , "ci.u") 
p.eff<-gg.forest.text(my.df, "vars", "effect")

p.out<-arrangeGrob(p,p.eff,ncol=2 , widths=c(2,2/3))
print(p.out)

我建议如下,

library(gtable)
a <- ggplotGrob(p)
b <- ggplotGrob(p.eff)
grid.newpage()
grid.draw(gtable:::cbind_gtable(a, b, "first"))

但是如果保留两个图的默认主题和边距,您会注意到对齐仍然存在问题,只是因为两个图面板中的 y 值不相同。

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

如何用ggplot对齐两个图? 的相关文章

  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • R 中的快速 QR 分解

    我有大量矩阵 需要对其执行 QR 分解并存储生成的 Q 矩阵 进行归一化 以便 R 矩阵在其对角线上具有正数 除了使用之外还有其他方法吗qr 功能 这是工作示例 system time Parameters for the matrix t
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 为什么 dplyr filter() 不能在函数内工作(即使用变量作为列名)?

    使用 dplyr 函数对数据进行过滤 分组和变异的函数 基本管道序列在函数之外工作得很好 这就是我使用真实列名称的地方 将其放入一个函数中 其中列名称是一个变量 并且某些函数可以工作 但有些函数则不能 尤其是 dplyr filter 例如
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • 如何在 R 中匹配多个 ggplot2 图中的调色板?

    自从被问到这个问题以来已经有一段时间了 但我知道一个事实 我很快就会提取新数据 我想弄清楚如何用这种技术来绘制它 看起来评论和答案中的人知道如何做到这一点 但我无法完全弄清楚所给我的内容 还有人想尝试一下吗 我正在尝试使用具有多个级别的因子
  • 为什么 R 更新后 sim_slopes() 中会出现此错误?

    我正在尝试使用 交互 包来创建简单斜率的约翰逊 尼曼图 但是 当尝试运行 sim slopes 函数时 出现以下错误 直到我将R更新到4 2 2 我才没有遇到这个问题 我使用的是 macOS Ventura 13 1 Error class
  • R 的 ggplot2 有 Python API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的问题就像标题一样简单 我想使用R s ggplot2但我所有的数据处理都是在Python 有没有Py
  • 如何从 R 中的 txt 文件读取矩阵?

    我有一个带有矩阵的txt文件 Matrix txt 重要 数字之间没有空格 0100 1001 1100 我想在 R 中将其作为矩阵读取 我该怎么做 我尝试使用 as matrix read table Matrix txt sep 但失败
  • ggplot2:如何标记事件发生的日期

    我想从第二个情节中获取第一个情节的信息 第二张图表示事件发生的天数 它看起来更宽 因为它没有图例 但它是相同的时间尺度 我选择在第一个图中手动分配颜色 I would like to overlay the second plot dots
  • R 中用于调用 sed、rsync、ssh 等的 system() 的替代方案:函数是否存在,我应该编写自己的函数,还是我错过了重点?

    最近 我发现了base files命令 与其他命令一起使用 例如getwd write lines file show dir等等 似乎有许多 bash 函数的 R 等价物 我还在 R 中编写了一些函数来简化对ssh and rsync通过
  • 如何在将两根柱子保持在一起的同时熔化柱子?

    我有这种宽格式的数据 我想将其转换为长格式 Cond Construct Line Plant Tube shoot weight shoot Tube root weight root 1 Standard NA NA 2 199 95
  • 使用 template.docx 从 Shiny App 编织 Word 文档

    我正在尝试使用 template docx 文件从闪亮的应用程序编写一个 Word 文档 我收到以下错误消息 pandoc exe template docx openBinaryFile 不存在 没有这样的文件或目录 以下 3 个文件当前
  • 无法更改 RStudio 中的 R 版本

    我的 RStudio V 0 99 491 无法更改 R 版本 我以平常的方式行事Global Options gt R Version 然后它挂起并且不再工作或反应 R 运行良好的初始版本是R 3 1 0 我以前从未遇到过这样的问题 也许

随机推荐

  • 检查文件是否存在的最快方法[重复]

    这个问题在这里已经有答案了 我使用的方法只是尝试 fopen 要检查的文件 does file exist char fname 999 whatever constructed during execution FILE fp NULL
  • sql.Identifier 不带引号

    我在网上搜索 sql Identifier without quoting 并且这个帖子 https stackoverflow com questions 43877210 how to remove the quotes from a
  • R 闪亮登录黑客

    在尝试了 RStudio Shiny Pro Server 的评估后 我对登录 身份验证机制不太感兴趣 因为它们不是管理客户端访问闪亮应用程序的用户帐户的简单机制 因此 我试图在 Shiny 中创建自己的登录机制 除了在shinydashb
  • .NET 客户端编程中出现异常“AMQP 操作被中断”(代码=406)

    我有一个 2 8 2 RabbitMQ 服务器和一个 2 8 2 客户端 dll 有声明队列并获取消息的代码 它工作正常 所有参数都正确 IModel channel null ConnectionFactory factory new C
  • Windows 工作流程 4.0 InstancePersistenceCommand 错误

    我有一个 wcf 工作流程 其中有三个按顺序排列的接收活动 IE 1 接收申请 2 经理1批准 3 最终经理批准 我的问题是 我能够使用客户端应用程序中的工作流程并调用第一个 接收应用程序活动 但是当我尝试调用第二个 manager1 批准
  • Android 中的轮播动画

    请参阅下面的屏幕 我尝试使用封面流来实现此动画 就像我们作为轮播动画一样 但我没有得到与屏幕中所示相同的效果 如果有人做过这种类型的动画 请将代码片段发送给我 我前段时间在我的应用程序中遇到了类似的问题 虽然我没有处理过您在图像右下角显示的
  • 在 R 中的同一张图上绘制多列[重复]

    这个问题在这里已经有答案了 我有以下数据框 A B C D Xax 0 451 0 333 0 034 0 173 0 22 0 491 0 270 0 033 0 207 0 34 0 389 0 249 0 084 0 271 0 54
  • RxJava2 + Room:clearAllTables() 调用后数据未插入数据库

    成功后在我的Android应用程序中login我将会话信息保存在 Room 中 然后从 BE 检索用户信息并保存它 一切正常 我可以看到数据库表中保存的信息 When 用户注销从应用程序中 所有表都通过 appDatabase clearA
  • 如何制作撤消/重做功能

    我想添加一个undo redo我的脚本中的函数 我环顾四周 看到了一些建议 其中大多数建议使用command pattern 该函数必须在一页上运行 重新加载页面后 该函数必须能够redo undo最后的事情 我不知道命令模式是如何工作的
  • NSFetchedResultsController 在更新后看不到新的插入/删除获取的值

    在阅读了数十个类似的问题后 我想以这样的说法开始 我确实设置了 NSFetchedResultsController 的委托 但它不起作用 所以我有一个简单的 TableViewController 其单元格填充有 NSFetchedRes
  • 使用Rails 3 link_to进行ajax回调的正确方法是什么[重复]

    这个问题在这里已经有答案了 这是场景 Summary 我有一个解决方案 但我想知道这是否是在 Rails 3 中使用 AJAX 回调的最佳方法 Problem 我有一个链接 当单击它时 它应该使用 AJAX 来更新现有的 html 元素 在
  • 像 Twitter 上一样的角色倒计时

    如何使用 jQuery 制作像 Twitter 上那样的 剩余字符 倒计时 并且还将输入限制为文本区域 Make a span and textarea并为它们提供唯一的选择器 使用 ID 或类 如下所示
  • __init__() 应该调用父类的 __init__() 吗?

    我在 Objective C 中使用过 我有这样的构造 void init if self super init init class return self Python 是否也应该调用父类的实现 init class NewClass
  • 错误:(40, 28) 找不到与给定名称匹配的资源(在“value”处,值为“@integer/google_play_services_version”)

    我仍然无法解决这个问题 在我的 androidManifest xml 中我有 我在 android studio 工作 但仍然找不到任何答案 请帮忙 这是显示地图片段
  • WiX 将引导 x86 和 x64 msi 刻录到单个无 UI 引导程序中

    我的安装程序 msi 有 x64 和 x86 版本 并且想要发布一个可执行文件来简单地检查机器架构并运行 x86 x64 MSI MSI 基本相同 它们安装相同的 AnyCPU 文件 我将其捆绑在共享的 cab 文件中 以免安装程序的大小增
  • 接收到的 PowerShell 事件不按顺序排列

    这听起来像是一种合理的期望 即从一个线程触发的事件应该按照触发的顺序接收 然而 情况似乎并非如此 这是已知 记录的行为吗 是否有办法纠正它 下面是两个可立即运行的代码片段 它们显示了该问题 并在 Win7 和 Win10 下使用 PS v5
  • ListView距列表顶部的距离

    我有一个ListView 我想制作一个随列表滚动的背景 我看到了代码Shelves http code google com p shelves source browse trunk Shelves src org curiouscrea
  • 从vba中的write语句中删除双引号

    此代码将日志文件写入 LogFilePath 并生成如下输出 StarRange 和 EndRange 是一个变量 其值将从其他函数填充 Start postion A1 End position B100 Code Sub WriteLo
  • SVN:递归添加

    我正在尝试从我的工作副本中的 SVN 文件夹中添加新的项目文件 它询问选项 递归 并显示消息 您确定要添加 许多项目 有人可以指导我启用此 递归 选项有什么用吗 当我新添加新项目文件时我是否应该启用它 谢谢 简洁版本 svn add for
  • 如何用ggplot对齐两个图?

    我试图使用对齐两个图grid但没有成功 我尝试调整主题 使绘图边框 大小相同 但尽管使用相同的 y 坐标 但绘图并未对齐 对于下面的例子我可以使用annotation custom 网站上有一些示例 但这限制了我可以添加的文本数量 如有任何