R - 绘图标签文本的文本格式 - 删除线

2024-05-06

如何使绘图标签中的标签文本的一部分带有删除线?

例如,要使 y 轴标签读取为“标签中的 strikethrough 文本?"

 ggplot(mpg, aes(x=displ, y=hwy)) 
        + geom_point() 
        + ylab("~~strikethrough~~ text in a label?")

这是一个很小的问题,我认为找到解决方案也很简单,但经过一段时间的寻找后却无济于事。


您可以创建自定义元素函数axis.text.y。我试图得到一个通用的解决方案,但我认为我的解决方案有点棘手,而且不是很干净,因为我必须手动设置某些视口的 y 位置(请参阅代码以获得更好的解释)

自定义 axis.text.y 有 2 个参数:轴标签和删除它的文本。它找到要与轴标签相匹配的文本位置并添加一段。(如果文本定义了两次,则只需要第一次出现)。

要使用该解决方案,您可以执行以下操作:

library(ggplot2)
library(grid)
ggplot(mpg, aes(x=displ, y=hwy)) +
    geom_point() + theme(axis.title.y=element_blank())+
    theme( axis.text.y = axis.strike(strike = "label",
               lab="strikethrough text in a label?"))

自定义 axis.text.y 元素的代码:

# user interface : element called by the user
axis.strike = function(strike,lab) {
    structure(
        list(strike=strike,lab=lab),
        ## inheritance since it should be a element_text
        class = c("element_custom","element_blank")  
    )
}

element_grob.element_custom <- function(element, x,y)  {
    ## the axis label
    g.X <- textGrob(element$lab,rot=90,vjust=-0.25)
    ## I use the grob text dimensions(height,width,position) to 
    ## create a viewport vp
    ## within this viewport I create a segment 
    unit.H <- grobHeight(g.X)
    unit.W <- grobWidth(g.X)
    rate <- nchar(element$strike)
    ## search of the position of the text to strike
    pos <- as.numeric(gregexpr(element$strike,element$lab)[[1]])
    vp=viewport(just="centre",
          ##BAD OFFSET HERE!!
          ## TODO: find better way to define viewport y position
           y = grobY(g.X,'south')+unit(5,'line'), 
           yscale=c(0,nchar(element$lab)),
          width =unit.W,height=unit.H)
    g.seg <- segmentsGrob(vp=vp,x0=0,x1=0,
                           y0=unit(pos-1,'native'),
                           y1=unit(pos-1+rate,'native'))
    gTree(children=gList(g.seg,g.X,g.seg),cl = "custom_axis")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R - 绘图标签文本的文本格式 - 删除线 的相关文章

  • 将纯文本转换为 HTML

    我有一个脚本 在某个时刻我可以通过 Ajax 调用获取 HTML 数据 我必须将此 HTML 转换为纯文本 如下所示 div text data 我现在想扭转这一局面 再次将文本设为 HTML 我有一个简单的 Jquery 方法可以做到这一
  • 将 ftransform 与折叠 R 包中的 fgroup_by 一起使用

    我正在尝试重现以下输出dplyr代码与R包裹collapse dplyr Code library tidyverse starwars gt select name mass species gt group by species gt
  • 使用 R 下载压缩数据文件、提取和导入数据

    EZGraphs 在 Twitter 上写道 很多在线 csv 都被压缩了 有没有办法下载 解压缩存档并使用 R 将数据加载到 data frame Rstats 我今天也尝试这样做 但最终只是手动下载 zip 文件 我尝试过类似的东西 f
  • R中的重叠矩阵

    我有以下数据框 id channel 1 a 1 b 1 c 2 a 2 c 3 a 我想创建并重叠矩阵 它基本上是一个方阵 行和列标签为 a b c 表中的每个条目显示每个通道共有多少个 id 例如 在上面的例子中 矩阵看起来像 a b
  • TinyMCE:如何禁用代码重写?

    我试图阻止 TinyMCE 在 Joomla 中 重写代码 添加 删除 移动标签和属性等 我不想设置每个标签 只需阻止 TinyMCE 更改我的代码即可 TinyMCE配置 verify html false 对我来说不起作用 切换到源代码
  • R 闪亮仪表板中的动态重复条件面板

    我正在尝试创建一个动态条件面板 所以我的条件如下 在用户界面中输入 selectInput inpt Input Number seq 1 50 1 selectize FALSE 我的条件面板 UI 输入是 conditionalPane
  • 如何在 Shiny 中提取动态生成的输入值?

    我正在创建一个闪亮的应用程序 它将根据客户的不同功能为客户生成分数 在我闪亮的应用程序中 我提供了 checkboxGroupInput 来选择所需的功能 根据所选功能 应用程序将动态地将 numericInput 添加到 Web ui 以
  • 绘制 Cox 回归的 Kaplan-Meier 图

    我使用 R 中的以下代码设置了一个 Cox 比例风险模型来预测死亡率 添加协变量 A B 和 C 只是为了避免混淆 即年龄 性别 种族 但我们真正对预测变量 X 感兴趣 X 是一个连续变量 cox model lt coxph Surv t
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • `as.matrix` 和 `as.data.frame` S3 方法与 S4 方法

    我注意到定义as matrix or as data frame作为 S4 类的 S3 方法 使例如lm formula objS4 and prcomp object 开箱即用 如果它们被定义为 S4 方法 则这不起作用 为什么将方法定义
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • 在r中的某个阈值处破坏 cumsum() 函数

    例如我有以下代码 cumsum 1 100 我想打破它 如果一个元素 i 1 大于3000 我怎样才能做到这一点 因此 而不是这个结果 1 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 15
  • 在 Shiny 中显示反应式 htmlTable 表格

    我正在制作我的第一个 Shiny 应用程序 但找不到任何有关如何显示使用 htmlTable 包创建的表格的示例 我基本上想在按下按钮时创建一个表格并显示它 Shiny 显示 html 代码而不是表格 我不知道用什么替换服务器部分中的 re
  • 使用选定因子水平的值向 ggplot-barchart 添加水平线

    在这个情节中 df lt data frame factor as factor c rep A 3 rep B 3 Treatment c rep c A B C 2 values runif 6 0 1 ggplot df aes Tr
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • dplyr:连接中的 NSE (by)

    我很难弄清楚如何使用 dplyr left join 和 NSE 连接两个表 问题是我无法为 by 提供正确的值 我想我现在已经找到了解决方案 但感觉我正在以一种额外复杂的方式来做 因此 如果您知道更简单 更优雅的解决方案 请告诉我 这就是
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个

随机推荐