ggplot,左侧反转 y 轴上有点,第二轴上有条形图

2024-03-03

我试图根据用户的选择以不同的方式生成一个带有两个垂直轴的 ggplot。一个选择允许用户反转每个轴。另一种选择允许他们在每个轴上的系列的点和条之间进行选择。当主(左侧)y 轴反转并且辅助(右侧)数据设置为显示为条形时,我遇到了问题。在这种情况下,条形图从图的顶部而不是底部开始,因为它们应该基于次轴方向。

双方都有积分,一切看起来都很好:

点没有底部或顶部,只有一个坐标,因此它们看起来不错。但是对于右侧的条形,一旦我反转左侧 y 轴,条形就会从顶部开始垂直翻转并向下生长,直到到达相应的坐标:

(请忽略图例符号,我可以自己更正,但会扩展 MRE 的代码)。

对于我从其他帖子中学到的东西(例如,[A] https://stackoverflow.com/a/3101876/12372421, [B] https://stackoverflow.com/a/59957110/12372421, ) ggplot 不允许处理两个完全独立的垂直轴,而只是处理一个辅助轴,它是主轴的重新缩放。这就是我遇到的问题的根源。我的条形图将左侧零作为它们的最小 y 值。

我只希望当我还选择反转辅助轴时才会发生这种情况,但这里的情况并非如此。如果仅左侧 y 轴反转,我希望右侧条从图的底部开始,即右侧的零。


MRE

** Data

df1 <- data.frame(ID = c("A", "A", "A", "A", "B", "B", "B", "B"), 
                  Date = structure(c(19078, 19085, 19092, 19099, 19078, 19085, 19092, 19099), class = "Date"),
                  Val = c(236, 221, 187, 136, 77, 100, 128, 180))

df2 <- data.frame(ID = c("J", "J", "J", "J", "K", "K", "K", "K"), 
                  Date = structure(c(19078, 19085, 19092, 19099, 19078, 19085, 19092, 19099), class = "Date"),
                  Val = c(478, 500, 549, 479, 73, 5, 15, 74))

** 两侧都有点的工作案例

library(dplyr)
library(ggplot2)

# prepare y2 scaled data
ylim1 <- rev(range(df1$Val))
ylim2 <- range(df2$Val)
scale_y2.1 <- function(y, ylim1, ylim2) {
  ylim1[1] + (ylim1[2] - ylim1[1]) *(y - ylim2[1])/(ylim2[2] - ylim2[1])
}
dfAll <- full_join(df1, df2, by = c("ID", "Date"), suffix = c("1", "2"))
y2.scl <- scale_y2.1(dfAll$Val2, ylim1, ylim2)
dfAll <- dfAll %>% mutate(Val2_scl = y2.scl)

# prepare y2 ticks and scaled breaks
labs2 <- pretty(ylim2)
brks2 <- scale_y2.1(labs2, ylim1, ylim2)

# generate plot
ggplot(dfAll) +
  geom_point(aes(x = Date, y = Val1, color = ID, group = ID), na.rm = TRUE) +
  geom_point(aes(x = Date, y = Val2_scl, color = ID, group = ID), na.rm = TRUE) +  
  scale_y_continuous(trans = "reverse", sec.axis = dup_axis(breaks = rev(brks2),
                                                            labels = rev(labs2),
                                                            name = "Val2"))

** 箱子破损,右侧有横条

# generate plot
ggplot(dfAll) +
  geom_point(aes(x = Date, y = Val1, color = ID, group = ID), na.rm = TRUE) +
  geom_bar(aes(x = Date, y = Val2_scl, fill = ID, group = ID), na.rm = TRUE,
           stat = "identity", position = position_dodge(preserve = "single")) +  
  scale_y_continuous(trans = "reverse", sec.axis = dup_axis(breaks = rev(brks2),
                                                            labels = rev(labs2),
                                                            name = "Val2"))

** 这个答案 https://stackoverflow.com/a/64974716/12372421似乎有一些适合我的案例的潜力。它有一个相反的左侧轴,并且条形仍然从下向上生长。不幸的是,答案没有对所做的事情或为什么有效进行任何解释。这只是工作代码。我无法调整它以适合我。

** 这另一个答案 https://stackoverflow.com/a/55348769/12372421也可以工作,因为geom_linerange()让我们指定最小和最大 y 值。但是,在这种情况下,需要手动设置线条范围的宽度以使它们看起来像条形。在我的设置中,要绘制的系列数量可以从几个到超过 20 个不等。因此,手动设置条形宽度似乎不太稳健/实用。


我们可以使用geom_tile:

ggplot(dfAll) +
  geom_point(aes(x = Date, y = Val1, color = ID, group = ID), na.rm = TRUE) +
  geom_tile(aes(x = Date, y = (ylim1[1] +  Val2_scl)/2, height = ylim1[1]-Val2_scl, 
                fill = ID, group = ID), na.rm = TRUE,
           stat = "identity", position = position_dodge(preserve = "single")) +
  scale_y_continuous(trans = "reverse", sec.axis = dup_axis(breaks = rev(brks2),
                                                            labels = rev(labs2),
                                                            name = "Val2"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot,左侧反转 y 轴上有点,第二轴上有条形图 的相关文章

  • 按组连接/粘贴列并添加到原始数据

    我有一个名称数据框 名称 按 部门 分组 Dept Date Name 30 07 DEC 02 Raphaely 30 18 MAY 03 Khoo 40 07 JUN 02 Mavris 50 01 MAY 03 Kaufling 50
  • R 中的离散化

    有谁知道有一个包可以实现连续变量离散化的监督学习算法 dprep 包包含类似的功能 但该包已被弃用 有任何想法吗 感谢您的帮助 您仍然可以使用dprep包 但你必须从源代码安装它 我刚刚测试过 它运行良好 不过 您或许可以看看离散化 htt
  • R ggplot结合颜色图例和不同因子长度的填充

    我正在使用不完整因子设计的数据绘制图表 由于设计的原因 我的颜色手动比例和填充手动比例的长度不同 因此 我得到了两个传说 我怎样才能删除其中之一或者更好地将它们组合起来 我看过这些问题 合并单独的大小并填充 ggplot 中的图例 http
  • 如何计算两个邮政编码之间的距离?

    我有一个美国邮政编码列表 我必须计算所有邮政编码点之间的距离 它是一个 6k 邮政编码长列表 每个实体都有邮政编码 城市 州 纬度 经度 面积和人口 所以 我必须计算所有点之间的距离 即 6000C2 组合 这是我的数据示例 我已经在 SA
  • igraph - 将文本添加到社区图

    使用下面的代码 我可以在 igraph 提供的 空手道俱乐部 示例中生成社区图 请参见第一张图片 library igraph karate lt make graph Zachary wc lt cluster walktrap kara
  • 从数据/系数创建 lm 对象

    有谁知道可以在给定数据集和系数的情况下创建 lm 对象的函数 我对此很感兴趣 因为我开始使用贝叶斯模型平均 BMA 并且我希望能够根据 bicreg 的结果创建 lm 对象 我想访问所有不错的通用 lm 函数 例如诊断绘图 预测 cv lm
  • 按组渐进串联列[重复]

    这个问题在这里已经有答案了 假设我有这个输入 ID date 1 date 2 str 1 1 2010 07 04 2008 01 20 A 2 2 2015 07 01 2011 08 31 C 3 3 2015 03 06 2013
  • 没有适用于“filter_”的方法应用于类“c('double', 'numeric')”的对象

    使用下面的代码 我尝试过滤我的数据集 以便仅选择 CG less14 0 和 CG High14 0 的数据集 我收到错误 没有适用于 filter 的方法应用于 c double numeric 类的对象 我的代码有问题吗 married
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 根据值绘制具有条件颜色的折线图

    我想绘制折线图 根据值 它应该改变它的颜色 我发现的是 plot sin seq from 1 to 10 by 0 1 type p col ifelse sin seq from 1 to 10 by 0 1 gt 0 5 red ye
  • R 在列中按分隔符分割字符串

    我有一个包含几行的文件 例如 A B C awer ttp net Code 554 abcd ttp net Code 747 asdf ttp net Part 554 xyz ttp net Part 747 我想使用 R 仅拆分表的
  • 如何使用核心 R 操作/访问“dist”类实例的元素?

    R 中的基本 公共类称为 dist 并且是对称距离矩阵的相对有效的表示 不像一个 matrix 对象 但是 似乎不支持操纵 dist 使用索引对实例 操作员 例如 以下代码不返回任何内容 NULL 或出现错误 First create an
  • 张量流:RStudio 中的 [NOT FOUND] 错误

    我尝试在中运行以下代码RStudio library tensorflow x data lt runif 100 min 0 max 1 y data lt x data 0 1 0 3 W lt tf Variable tf rando
  • 将嵌套 for 循环转换为 R 中的并行循环

    下面您可以在 R 中找到一段代码 我想将其转换为使用多个 CPU 作为并行进程运行 我尝试使用foreach包 但并没有走得太远 考虑到我有 3 级嵌套循环 我找不到一个很好的例子如何让它工作 我们将非常感谢您的帮助 下面的代码示例 我做了
  • multidplyr :将函数分配给集群

    参见下面的工作解决方案 我想使用 multidplyr 并行化函数 calculs R f lt function x return x 1 main R library dplyr library multidplyr source ca
  • R - 数据框列中唯一值的数量

    对于数据框df 我需要找到的唯一值some col 尝试了以下方法 length unique df some col 但这并没有给出预期的结果 然而length unique some vector 对向量进行处理并给出预期结果 创建 d
  • 使用 R 的 qdap 包估计文档极性,无需使用 sendSplit

    我想申请qdap s polarity函数对文档向量进行处理 每个文档可以包含多个句子 并获得每个文档相应的极性 例如 library qdap polarity DATA state all polarity Results 1 0 81
  • 读取时 R 中的内存错误.xlsx

    我正在使用以下 R 代码 也利用 Java 参数来增加内存 library xlsx options java parameters Xmx1g library XLConnect NiVe lt read xlsx version1 xl
  • tmap 仅在 sf 几何列中绘制第一个多边形

    tmap 仅绘制 sf 几何列中的第一个多边形 但是plot 得到他们全部 一些 github 问题tmap https github com mtennekes tmap issues 360 and leaflet https gith
  • update() 具有局部协变量的函数内的模型

    我需要从函数内部更新回归模型 理想情况下 该函数应该适用于任何类型的模型 lm glm multinom clm 更准确地说 我需要添加函数内部定义的一个或多个协变量 这是一个例子 MyUpdate lt function model ra

随机推荐

  • IIS会回收asp.net core进程吗?

    我需要在我的 asp net core 应用程序中运行长时间运行的后台任务 我了解 Azure Webjobs 和其他进程外技术 但我宁愿保持解决方案简单并直接在 asp net core 进程中运行这些任务 我使用 Kestrel 该应用
  • 使 VSCodium 的 python 代码突出显示等于 VSCode

    因为 微软不好 而从 VSCode 迁移到 VSCodium 发展python应用程序似乎缺少一些代码颜色 例如 Dark 主题中绿松石色的模块或浅蓝色的局部变量 在下面的比较中可见 Left VSCodium Right VSCode 正
  • 如何在Android中读取彩信数据?

    我想读取彩信数据 我已经在中看到了零件表mmssms db彩信条目的存储位置 我正在使用光标 我想知道合适的URI 我正在使用 content mms sms conversations 并且列名称图像的 地址 发送至 文本 或 主题 和
  • 在 C# 中比较两个结构体的值

    我不是在寻找返回 bool 的两个结构的比较 我想知道是否有一种方法可以获取两个结构的哪些字段 相同的结构 但可能不同的值 是不同的 基本上我想要一种更简单的方法来执行以下操作 public class Diff public String
  • 如何将命令行参数从 pytest 传递到代码

    我正在尝试将参数从 pytest 测试用例传递到正在测试的模块 例如 使用 main pyPython 样板 https www python boilerplate com py3 argparse pytest 我可以从命令行运行它 p
  • 音频元素源的 HTML5 本地存储 - 可能吗?

    我最近一直在尝试 html5 的音频和本地存储功能 但遇到了一些让我困惑的事情 我希望能够在本地缓存或存储音频元素的源 以实现更快的离线播放 问题是我看不出当前的实现如何可能实现这一点 我使用 WebKit 尝试过以下操作 创建一个清单文件
  • Azure DocumentDB 十进制截断

    我目前正在使用 Azure DocumentDB 来存储带有价格的产品数据 几乎一切都工作得很好 但现在我遇到了一个问题 即从 DocumentDB 读取时我的小数 System Decimal 被截断 比如这个价格 Input Price
  • 如何使用带有StanfordCoreNLP prop 'ner'的序列化CRFClassifier

    我正在使用StanfordCoreNLP API 接口以编程方式执行一些基本的NLP 我需要在自己的语料库上训练模型 但我想使用StanfordCoreNLP界面来做到这一点 因为它在幕后处理许多干的机制 我在那里不需要太多的专业知识 我已
  • PHP中两个日期相减

    我在 php 中有两个日期 date1 May 3 2012 10 38 22 GMT date2 06 Apr 2012 07 22 21 GMT 然后我将它们都减去 date2 date1 并得到 Result 6 为什么结果是 6 而
  • R dplyr:在列中查找特定值,然后用该值替换右侧后续列中的相邻单元格

    我正在尝试创建一个地点和事件时间的矩阵 就我而言 一旦事件发生 1 它就是永久性的并且不能返回到 0 一旦列中的单元格为 1 我将尝试用 1 填充右侧后续列中的相邻单元格 请参见下面的示例 site lt c A B C D E F G s
  • 用于生成 HTML 标签的 PHP 库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 PHP 新手 抱歉 如果这是常见问题解答 假设我有这个 HTML 表 table width 10
  • 在 Javascript 或 jQuery 中,如何仅删除第一个和最后一个标签?

    给定以下字符串 var htmlStr p class red 349dsa01 This is p p class blue saf9vsaz a test p 如何删除该字符串的第一个和最后一个标签 这将是结果 var htmlStr
  • 有关角度谷歌地图聚类选项的任何文档吗?

    您好 我正在使用此处提供的 Angular Google 地图库https github com nlaplante angular google maps https github com nlaplante angular google
  • Facebook:自动刷新长期访问令牌

    我正在为我的应用程序的用户存储长期访问令牌 这些用户已将其 Facebook 帐户与其关联 自灭亡以来离线访问代币 这些长期存在的代币的有效期为 大约 60 天 但是 当用户与 Facebook 交互时 它们可以自行刷新 根据文档 http
  • 如何在终端中创建换行符?

    我在最新的 Mac OSX 终端上使用 Python 当我按 Enter 时 它会处理我输入的代码 并且我无法弄清楚如何添加额外的代码行 例如对于基本循环 在 python shell 中 如果您正在键入允许继续的代码 则按一次 Enter
  • 非类型参数的模板参数必须是表达式

    为什么下面的代码是错误的 template
  • 在 WebGL 中与 HTML 背景混合

    我正在将平面颜色和纹理绘制到 WebGL 画布中 我的颜色和纹理具有不同的 alpha 值 我希望它们能够正确混合 我想要透明背景 它们应该与画布下的 HTML 内容混合 在 WebGL 中 我使用 gl clearColor 0 0 0
  • memcpy 是否保留不同类型之间的数据?

    是否打电话memcpy如果缓冲区大小足够 在两个不同的结构上保留原始数据 如果它们各自的数据类型重叠 它是否被定义为用先前数据类型的数据检索另一种数据类型的值 对于两种 c cpp 语言来说 这应该是相似的 但我在 cpp 中提供了一个示例
  • POST 后重新加载浏览器窗口,而不提示用户重新发送 POST 数据

    当用户访问我的网站时 每个页面上都会有一个 登录 链接 单击此按钮会使用一些 JavaScript 来显示一个覆盖窗口 系统会在其中提示用户输入其凭据 输入这些凭据后 将向 Web 服务器发出 Ajax 调用以验证它们 如果它们有效 则会发
  • ggplot,左侧反转 y 轴上有点,第二轴上有条形图

    我试图根据用户的选择以不同的方式生成一个带有两个垂直轴的 ggplot 一个选择允许用户反转每个轴 另一种选择允许他们在每个轴上的系列的点和条之间进行选择 当主 左侧 y 轴反转并且辅助 右侧 数据设置为显示为条形时 我遇到了问题 在这种情