r - 如何在表达式()中包含一个保存文本的对象以用于 ggplot2 图形?
问题描述
我正在尝试将数学符号和对象与保存到它们的值结合起来,以使用 geom_text() 显示在 ggplot 图中。这是与我的问题相关的示例代码:
# values
diff <- "0.81"
p <- "p < .01"
# approach 1) pasting in values
temp <- data.frame(condition = c("first"), value = c(2)) %>%
mutate(test = as.character(expression(atop(beta["2"] - beta["1"] == "-0.80", "p < 0.01"))))
ggplot() +
geom_bar(data = temp, aes(x = condition, y = value), stat = "identity") +
ylim(0, 5) +
geom_text(data = temp, x = 1, y = 4, aes(label = test), size = 7, parse = TRUE)
# approach 2) referring to objects with values
temp <- data.frame(condition = c("first"), value = c(2)) %>%
mutate(test = as.character(expression(atop(beta["2"] - beta["1"] == diff, p))))
ggplot() +
geom_bar(data = temp, aes(x = condition, y = value), stat = "identity") +
ylim(0, 5) +
geom_text(data = temp, x = 1, y = 4, aes(label = test), size = 7, parse = TRUE)
方法 1 创建了我的目标图,但我希望能够轻松引用对象以提供在 beta 之后出现的值。如果我采用当前的方法 2,它不会使用保存到对象的值,而只是使用文本“diff”和“p”。有没有办法保持方法 1 的基本结构,但使用对象来创建我想要的图形?
解决方案
我不确定当你有更多行时你想要发生什么,但如果你想部分地扩展一些变量,我认为这是最容易做到的bquote
。我把它拉到一个函数中,因为让它正确矢量化可能有点棘手
mylabs <- function(diff, p) {
sapply(mapply(function(diff, p) bquote(atop(beta["2"] - beta["1"] == .(diff), .(p))), diff, p), deparse)
}
temp <- data.frame(condition = c("first"), value = c(2)) %>%
mutate(test = mylabs(diff, p))
推荐阅读
- ios - 如何为 UIView 设置特定的角和阴影
- git - 更新了 Mac 上的 Git,旧版本仍然显示
- python - ndarray 是否有一个 mmap 的缓冲区?
- python - Python Regex:findall Regex 将文本字符串与棘手的规范匹配,并将最终结果放在单词列表中
- pandas - 使用值组合过滤数据框列值
- javascript - React JS Highcharts 放大和 x 和 y 轴
- node.js - 使用 create 方法对急切加载进行续集
- html - ADA 合规性 SVG 问题
- javascript - 树结构 - 移动节点
- xamarin - Xamarin 长文本绑定导致布局裁剪