gpt4 book ai didi

r - ggplot2:如何在 geom_text 标签中将字符变量(例如 x <- ".35")解析为字符而不是数字

转载 作者:行者123 更新时间:2023-12-04 22:31:57 28 4
gpt4 key购买 nike

我正在研究一个要发布的数字,并希望用一些 beta 和 p 值对其进行注释;我所在领域的样式指南规定这些数字的格式不带前导零(例如,“.003”,而不是“0.003”)。我遇到了一个看起来像 Catch-22 的东西;我从我的模型中提取了 beta 和 p 值,并进行了一些预处理以正确格式化它们,以便它们现在是字符而不是数字:

fake.beta.vals <- c(".53", ".29", ".14")
fake.p.vals <- c(".034", ".001", ".050")

但是,当我尝试在图中使用这些值时, parse = TRUE 会将它们重新转换为数值,从而丢失了我需要的格式。
fake.beta.vals <- c(".53", ".29", ".14")
fake.p.vals <- c(".034", ".001", ".050")

p <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width))
p <- p +
geom_smooth(method = "lm") +
geom_point() +
facet_wrap( ~ Species)
p

len <-length(levels(iris$Species))
vars <- data.frame(expand.grid(levels(iris$Species)))
colnames(vars) <- c("Species")
betalabs <- as.data.frame(fake.beta.vals)
plabs <- as.data.frame(fake.p.vals)
dat <- data.frame(
x = rep(7, len),
y = rep(4, len),
vars,
betalabs,
plabs)
dat$fake.beta.vals <- as.factor(dat$fake.beta.vals)
dat$fake.p.vals <- as.factor(dat$fake.p.vals)

p <- p +
geom_text(
aes(x = x,
y = y,
label = paste("list(beta ==",
fake.beta.vals,
", italic(p) ==",
fake.p.vals,
")"),
group = NULL),
size = 5,
data = dat,
parse = TRUE)
p

一段时间以来,我一直在努力解决这个问题,但添加了 as.character() :
        label = paste("list(beta ==",
as.character(fake.beta.vals),
", italic(p) ==",
as.character(fake.p.vals),
")"),

显然也被 parse = TRUE 抵消了

并添加我以前用来格式化我的值的函数:
statformat <- function(val,z){
sub("^(-?)0.", "\\1.", sprintf(paste("%.",z,"f", sep = ""), val))
}

更糟糕的是:
        label = paste("list(beta ==",
statformat(fake.beta.vals, 2),
", italic(p) ==",
statformat(fake.p.vals, 3),
")"),

并且以一团糟结束。

帮助?

最佳答案

使用 bquote 创建标签,然后使用 deparse 强制转换为字符表示

例如

# create a list of labels using bquotw
labs <- Map(.beta = fake.beta.vals,
.p = fake.p.vals,
f = function(.beta,.p) bquote(list(beta == .(.beta), italic(p) == .(.p))))
# coerce to a character representation for parse=TRUE to work within
# geom_text
dat <- data.frame(
x = rep(7, len),
y = rep(4, len),
vars,
labels = sapply(labs,deparse))


p <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_smooth(method = "lm") +
geom_point() +
facet_wrap( ~ Species) +
geom_text(data = dat, aes(x=x,y=y,label=labels), parse=TRUE)
p

关于r - ggplot2:如何在 geom_text 标签中将字符变量(例如 x <- ".35")解析为字符而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19306322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com