在 ggplot 上显示两个平行轴 (R)

2024-01-02

假设我们有以下类型的简单情节。

library(ggplot2)
df = data.frame(y=c(0,1.1,2.3,3.1,2.9,5.8,6,7.4,8.2,9.1),x=seq(1,100, length.out=10))
ggplot(df,aes(x=x,y=y)) + geom_point()

x完全相关z。其关系为:Constant=x^2*z=1.23因此我可以像这样重写 data.frame :

df = cbind(df,1.23/df$x^2)

问题是:

如何显示这两个变量xand zx 轴之一?它可以是一个在图表的底部,一个在图表的顶部,或者两者都在底部。


这是一个危险的尝试。以前带有对数刻度的版本只是wrong.

library(ggplot2)
df = data.frame(y=c(0,1.1,2.3,3.1,2.9,5.8,6,7.4,8.2,9.1),
                x=seq(1,100, length.out=10))
df$z = 1.23/df$x^2


## let's at least remove the gridlines
p1 <- ggplot(df,aes(x=x,y=y)) + geom_point() +
  scale_x_continuous(expand=c(0,0)) +
  theme(panel.grid.major=element_blank(),
        panel.grid.minor = element_blank())

## make sure both plots have expand = c(0,0) 
## otherwise data and top-axis won't necessarily be aligned...
p2 <- ggplot(df,aes(x=z,y=y)) + geom_point() +
  scale_x_continuous(expand=c(0,0))

library(gtable)
g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)
tmp <- gtable_filter(g2, pattern="axis-b")

## ugly tricks to extract and reshape the axis
axis <- tmp[["grobs"]][[1]][["children"]][["axis"]] # corrupt the children
axis$layout <- axis$layout[2:1,]
axis$grobs[[1]][["y"]] <- axis$grobs[[1]][["y"]] - unit(1,"npc") + unit(0.15,"cm")
## back to "normality"    

g1 <- gtable_add_rows(g1, sum(tmp$heights), 2)
gtableAddGrobs <- gtable_add_grob # alias, making sure @!hadley doesn't see this
g1 <- gtableAddGrobs(g1, 
                     grobs=list(gtable_filter(g2, pattern="xlab"),axis), 
                     t=c(1,3), l=4)
grid.newpage()
grid.draw(g1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ggplot 上显示两个平行轴 (R) 的相关文章

随机推荐

  • UITableView 自定义节标题,重复问题

    我在为自定义 UITableView 部分标题设置动画时遇到问题 目标是创建可折叠的部分 当我第一次点击自定义标题时 它会按预期进行动画处理 但此后每次它都会在原始位置留下重复项并为另一个进行动画处理 图片示例 My Custom Head
  • 将 NA 值替换为组值

    我有一个 df 如下 有 5 个家庭 20 人 家庭中的某些人缺少关于是否拥有医疗卡的数据 我想为这些人提供与家庭中其他人相同的值 不是 NA 值 而是 0 或 1 的真正二进制值 我已经尝试了以下代码 我认为这是朝着正确方向迈出的一步 但
  • 编译时触发 std::vector 的范围检查

    目标 我想要一个范围检查版本std vector s operator 对于我的调试版本 在发布模式下没有范围检查 调试模式下的范围检查显然有利于调试 但它会导致我的发布代码减慢 5 10 这是我希望避免的 可能的解决方案 我在 Strou
  • 如果单元格自动更新,“编辑”功能将不起作用 - 需要解决方法 Google 表格

    当您手动更改单元格时 此代码将按预期工作 function onEdit event assumes source data in sheet named Prepsheet target sheet of move to named To
  • Android应用程序强制关闭时会发生什么

    我很想知道当应用程序在很长一段时间内没有响应时 当用户单击弹出窗口中的 强制关闭 时会发生什么 哪些事件会被解雇 任务会从托盘中删除吗 我认为当一个活动被强制关闭时 dalvik 将清理应用程序缓存并启动后台堆栈中的最后一个活动 但不确定它
  • XSD 两个具有相同名称但属性值不同的元素

    我正在尝试为以下内容定义 XSD 模板
  • 如何修复 python `dlib` 错误:“在平面命名空间 '_png_do_expand_palette_rgb8_neon' 中找不到符号”?

    我收到错误 symbol not found in flat namespace png do expand palette rgb8 neon 尽管发生了错误dlib正在安装相关 Python 版本的软件包 我正在使用 VSCode 以防
  • 为什么匿名类型不能在方法中传递?

    倾向于不从方法返回匿名类型的设计决策是什么 You can从方法返回匿名类型的实例 但因为您无法命名它 所以您无法准确声明该方法将返回什么 因此您必须声明它只返回object 这意味着调用者将无法对属性等进行静态类型访问 尽管他们仍然可以传
  • Qt/C++:如何获取远程PC(通信对端)MAC地址?

    我在 Windows 7 上使用 Qt5 在我的应用程序中 TCP服务器 我目前正在使用 QTcpSocket 类中的一些方法 QAbstractSocket peerAddress 为了得到对等地址 QAbstractSocket pee
  • 在Entity Framework4中捕获Sql异常?最佳实践是什么?

    您在数据层中使用什么实践来捕获 sql 异常 有人编写了一个通用 Sql 异常处理程序来捕获最常见的错误吗 你是怎么做到的 有什么例子吗 Thanks 仅由底层处理意外异常 数据层 在本例中为实体框架 的异常应仅由业务层处理 然后 业务层可
  • 如何在 TypeScript 中通过导入使用命名空间

    我在两个单独的文件中有两个类 一个从另一个文件扩展 基类包含一些import使用节点模块的语句 我不清楚为什么派生类 位于单独的文件中 无法识别基类 有人可以澄清一下吗 UtilBase ts
  • 如何让 ZK webfragment 与嵌入式 Jetty 9 一起工作?

    这个最小的嵌入式 Jetty 项目可以正确启动 扫描注释并查找并映射带注释的 TestServlet 项目结构 src main java test Test java webapp test zul pom xml 测试 java pac
  • 为什么 IIS 不支持分块传输编码?

    我正在与 IIS Web 服务器建立 HTTP 连接 并使用使用 Transfer Encoding chunked 编码的数据发送 POST 请求 当我这样做时 IIS 只是关闭连接 没有错误消息或状态代码 根据HTTP 1 1 规范 h
  • 当应用程序部署到 JBoss 时显示一条消息

    当我通过 JBoss AS 7 1 1 部署应用程序时 如何显示消息来提醒用户 我正在使用的技术 四郎1 2 3 莫贾拉2 1 7 PrimeFaces 5 1 JDK 1 7 JBoss 7 1 1 在 JBoss AS 前面放置一个准系
  • java中什么时候应该使用finalize()方法?

    我们什么时候应该真正使用java中的finalize 方法 如果我们想在finalize 方法中关闭连接 那么最好使用下面的代码 因为等待GC调用finalize 方法然后释放连接是没有意义的 try Connection creation
  • GWT 设计器不适用于 Maven-GWT 项目

    我刚刚启动了一个 GWT 项目 环境如下 日食赫利俄斯 Eclipse 3 6 的谷歌插件 eclipse 的 maven2 插件 Eclipse 3 6 的 Gwt 设计器 该项目是由 gwt maven plugin 创建的 该项目可以
  • 如何在Android中为长度不超过屏幕尺寸的较小文本创建跑马灯效果?

    我一直试图在我的应用程序中为 HELLO 一词提供选框效果 但 Android 不允许这样做 除非文本的长度超过屏幕尺寸 有解决办法吗 PS 这看起来很简单 我还没有得到任何解决方案 我使用了我在早期 Android 时代开发的简单的轻量级
  • 我可以为我的 RDS 实例使用 Amazon ELB 来实现负载均衡吗?

    我有两个问题 我可以在 RDS 实例上使用 ELB 来实现负载均衡吗 我可以在 EC2 实例上安装多个服务器并为所有服务器运行单个 ELB 实例吗 1 如果您的意思是只有一个 RDS 实例 那么在它前面的负载均衡请求就没有意义 如果您的意思
  • django mysql 强制使用索引

    我正在使用 django orm 和 mysql 由于某种原因 mysql 使用了错误的索引 我想手动覆盖使用的索引 我看到 django 团队出于跨平台原因决定阻止使用 with hints 扩展来强制建立索引 有没有人有任何解决方案 建
  • 在 ggplot 上显示两个平行轴 (R)

    假设我们有以下类型的简单情节 library ggplot2 df data frame y c 0 1 1 2 3 3 1 2 9 5 8 6 7 4 8 2 9 1 x seq 1 100 length out 10 ggplot df