R ggplot2:如何在geom_文本标签中将字符变量(例如x<;-";.35";)解析为字符,而不是数字
我正在制作一个用于出版的图形,并希望用一些beta和p值对其进行注释;我所在区域的样式指南规定,这些数字的格式应不带前导零(例如,“0.003”,而不是“0.003”)。我遇到了似乎是第二十二条军规;我已经从我的模型中提取了beta和p值,并进行了一些预处理,以正确设置它们的格式,使它们现在是字符而不是数字:R ggplot2:如何在geom_文本标签中将字符变量(例如x<;-";.35";)解析为字符,而不是数字,r,ggplot2,R,Ggplot2,我正在制作一个用于出版的图形,并希望用一些beta和p值对其进行注释;我所在区域的样式指南规定,这些数字的格式应不带前导零(例如,“0.003”,而不是“0.003”)。我遇到了似乎是第二十二条军规;我已经从我的模型中提取了beta和p值,并进行了一些预处理,以正确设置它们的格式,使它们现在是字符而不是数字: fake.beta.vals <- c(".53", ".29", ".14") fake.p.vals <- c(".034", ".001", ".050") 我已经为这
fake.beta.vals <- c(".53", ".29", ".14")
fake.p.vals <- c(".034", ".001", ".050")
我已经为这个问题绞尽脑汁一段时间了,但是添加了as.character()
:
显然也被parse=TRUE
并添加我以前用于设置值格式的函数:
statformat <- function(val,z){
sub("^(-?)0.", "\\1.", sprintf(paste("%.",z,"f", sep = ""), val))
}
结果就是一团糟
帮助?回到我的电脑,重新阅读你的问题后,我发现我误解了这个问题。尝试
I
函数时,我发现它似乎无法与parse
一起工作
我找到了一种让它工作的方法,这是通过在调用解析时使用'character or the'字符来封装false.beta.vals
和false.p.vals
p <- p +
geom_text(
aes(x = x,
y = y,
label = paste("list(beta ==",
"`", fake.beta.vals, "`",
", italic(p) ==",
"`", fake.p.vals, "`",
")",
sep=""),
group = NULL),
size = 5,
data = dat,
parse = TRUE)
p使用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
#使用bquotw创建标签列表
实验室+1为可复制示例。顺便说一下,对于出版物图形,您可以将pdf导入(例如)Inkscape并删除0。过去,我使用Inkscape编辑我的图形;然而,从历史上看,当评审员要求查看模型上的变体等,然后我不得不手工重新编辑我的所有数据时,我发现这是一种痛苦。我想让我的数字完全照本宣科,这样修改就不那么乏味了。但是我同意Inkscape是一个优秀的程序(开源!耶!)尝试使用I
函数封装它<代码>?我
告诉我它禁止对象的解释/转换。它应该告诉ggplot2
按字面意思输入。e、 g.ggplot(…,label=I(fake.beta.vals),…
。我现在无法测试它,但我非常确定它应该可以工作,所以我只留下这个注释。为什么未命名的函数参数在映射的参数中位于第三个位置?(感谢您解释为什么我使用bquote
的努力由于缺少deparse
步骤而失败。)@Dwin——懒惰。函数参数现在被恰当地命名为f
。我不是想给它命名,而是想弄清楚它为什么会成功。我原以为它会失败,但也许前两个参数不是f
的名称,这让它成功了?太棒了!我一直在想属于deparse
,但不知道如何与parse=TRUE
适当结合。谢谢!
label = paste("list(beta ==",
statformat(fake.beta.vals, 2),
", italic(p) ==",
statformat(fake.p.vals, 3),
")"),
p <- p +
geom_text(
aes(x = x,
y = y,
label = paste("list(beta ==",
"`", fake.beta.vals, "`",
", italic(p) ==",
"`", fake.p.vals, "`",
")",
sep=""),
group = NULL),
size = 5,
data = dat,
parse = TRUE)
# 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