gpt4 book ai didi

r - 在 scale_x_discrete 中创建下标

转载 作者:行者123 更新时间:2023-12-01 13:13:44 24 4
gpt4 key购买 nike

df <- data.frame(a=c(1,2,3,4,5,6), 
b=c("x1","x2","y1","y2","w1","w2"),
c=runif(6),
d=c(1,1,2,2,3,3))
p <- ggplot(aes(x=b, y=c), data=df) +
geom_bar(stat="identity") +
facet_grid(~d, scales="free_x")

我想使用 expression(或任何其他函数)为每个标签创建下标。我试过这个:

new_labels <- c(expression("x[1]"),expression("x[2]"),expression("y[1]"),expression("y[2]"),expression("w[1]"),expression("w[2]"))
p + scale_x_discrete(labels=new_labels)

还有这个

new_labels2 <- c("x[1]","x[2]","y[1]","y[2]","w[1]","w[2]")
p + scale_x_discrete(labels=function(new_labels2) expression(new_labels2))

但这些解决方案都没有给我预期的结果。

另外,如何将条形颜色更改为在所有方面都相同?

我以为 p + scale_fill_manual(values=c("green","re​​d")) 会起作用,但没有效果。

最佳答案

您可以为 scale_x_discretelabels 参数提供一个函数,以将表达式生成为字符串,然后解析字符串以将它们解释为表达式。在下面的示例中,我还添加了 fill=grepl("1", b) ,它将 b 列映射到基于美学的 fill b 的值中是否有 1。此映射是生成填充颜色所必需的,然后可以使用 scale_fill_manual 进行设置。

p = ggplot(aes(x=b, y=c, fill=grepl("1", b)), data=df) + 
geom_bar(stat="identity") +
facet_grid(~d, scales="free_x") +
guides(fill=FALSE) +
scale_x_discrete(labels=function(l) parse(text=gsub("(.)([0-9])", "\\1[\\2]", l)))

p

enter image description here

为了说明,下面是 gsub 函数在将字符串解析为表达式之前生成字符串的操作(基本上只是以编程方式执行您在问题中硬编码的内容):

p <- ggplot(aes(x=b, y=c, fill=grepl("1", b)), data=df) + 
geom_bar(stat="identity") +
facet_grid(~d, scales="free_x") +
guides(fill=FALSE) +
scale_x_discrete(labels=function(l) gsub("(.)([0-9])", "\\1[\\2]", l))

p

enter image description here

gsub 函数使用正则表达式进行替换。如果您不熟悉正则表达式,另一种可能更不透明的编码方式是:

function(l) paste0(substr(l,1,1), "[", substr(l,2,2), "]")

如果你想设置自己的填充颜色,你可以这样做:

p + scale_fill_manual(values=c("green","red")) 

引用您评论中的问题:您可以创建一个虚拟分组变量,如下所示:

library(tidyverse)

p <- df %>%
group_by(b.grp = substr(b, 1, 1)) %>%
mutate(grp.val = 1:n()) %>%
ggplot(aes(x=b, y=c, fill=factor(grp.val))) +
geom_bar(stat="identity") +
facet_grid(~d, scales="free_x") +
guides(fill=FALSE) +
scale_x_discrete(labels=function(l) parse(text=gsub("(.)(.)", "\\1[\\2]", l)))

关于r - 在 scale_x_discrete 中创建下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57846598/

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