如何在 ggplot2 轴刻度标签中添加上标逗号和 space?
How do I add a superscripted comma and a space in a ggplot2 axis tick label?
我想在 ggplot2 中为我的 y 轴刻度标签添加上标。我希望标签看起来像这样:
ATRS20m,0f(其中 0f 和 0m 为上标)。这会产生如下所示的错误。
Error in parse(text = levels(diff_30$Station)) :
<text>:1:8: unexpected symbol
1: ATRS2^0m0f
^
我意识到我正在解析的不是任何类型的 R 表达式,这就是它失败的原因。但是我怎样才能让它发挥作用呢?一定有办法。
我创建标签的代码如下所示:
paste(missing_df$Station,paste('^',missing_df$Precip_30_m,"m,",missing_df$TMin_30_f,"f",sep=''),sep='')
我绘制和生成标签的 ggplot 代码如下所示。
plot + scale_y_discrete(labels = parse(text = levels(diff_30$Station)))
我试过使用这个,但是失败了。我看过 bquote,它可能有用,但这种语法让我更加困惑。
plot + scale_y_discrete(labels = expression(parse(text = levels(diff_30$Station))))
任何帮助都会很棒。谢谢!
bquote() 究竟是如何让您感到困惑的?由于公式帽子后面的数字,请将您的上标放在引号中!应该可以解决您的问题...
library(ggplot2)
data("mtcars")
mtcars %>%
ggplot(aes(x = cyl, y = mpg))+
geom_point()+
ylab(bquote(~ATRS2^"0m"))+
xlab(bquote(~ATRS2^"0f"))
我显然误读了之前的问题,对那个问题真的帮不上忙。实际上,我确实遇到了一些问题,但没有看到数据。对于刻度中的上标,您可以试试 scales::label_math 吗?仍然没有直接解决你的问题,至少我得到了一些变量级别的上标 ;-)
library(ggplot2)
data <- tibble::tibble(x = as.factor(sample(letters[1:4], 100, replace = TRUE)), y = sample(1:100, 100, replace = TRUE))
data %>%
ggplot(aes(x = x, y = y))+
geom_point()+
scale_x_discrete(breaks = levels(data$x), , labels = scales::label_math(expr = "ATRS2"^{.x}, format = force))
让我们看看下一段代码是否能满足您的需求:
data("iris")
#vector from factor levels
strtest <- levels(iris$Species)
#We build the "label" and leave the result as a list
labels <- lapply(strtest, function(x) bquote(.(x)^'0m,0f'))
#Plotting
ggplot(iris,aes(x = Sepal.Length, y = Species))+
geom_point() +
#we use do.call to "apply" function 'expression' to each element of the list label
scale_y_discrete(labels=do.call(expression,labels))
结果:
我想在 ggplot2 中为我的 y 轴刻度标签添加上标。我希望标签看起来像这样:
ATRS20m,0f(其中 0f 和 0m 为上标)。这会产生如下所示的错误。
Error in parse(text = levels(diff_30$Station)) :
<text>:1:8: unexpected symbol
1: ATRS2^0m0f ^
我意识到我正在解析的不是任何类型的 R 表达式,这就是它失败的原因。但是我怎样才能让它发挥作用呢?一定有办法。
我创建标签的代码如下所示:
paste(missing_df$Station,paste('^',missing_df$Precip_30_m,"m,",missing_df$TMin_30_f,"f",sep=''),sep='')
我绘制和生成标签的 ggplot 代码如下所示。
plot + scale_y_discrete(labels = parse(text = levels(diff_30$Station)))
我试过使用这个,但是失败了。我看过 bquote,它可能有用,但这种语法让我更加困惑。
plot + scale_y_discrete(labels = expression(parse(text = levels(diff_30$Station))))
任何帮助都会很棒。谢谢!
bquote() 究竟是如何让您感到困惑的?由于公式帽子后面的数字,请将您的上标放在引号中!应该可以解决您的问题...
library(ggplot2)
data("mtcars")
mtcars %>%
ggplot(aes(x = cyl, y = mpg))+
geom_point()+
ylab(bquote(~ATRS2^"0m"))+
xlab(bquote(~ATRS2^"0f"))
我显然误读了之前的问题,对那个问题真的帮不上忙。实际上,我确实遇到了一些问题,但没有看到数据。对于刻度中的上标,您可以试试 scales::label_math 吗?仍然没有直接解决你的问题,至少我得到了一些变量级别的上标 ;-)
library(ggplot2)
data <- tibble::tibble(x = as.factor(sample(letters[1:4], 100, replace = TRUE)), y = sample(1:100, 100, replace = TRUE))
data %>%
ggplot(aes(x = x, y = y))+
geom_point()+
scale_x_discrete(breaks = levels(data$x), , labels = scales::label_math(expr = "ATRS2"^{.x}, format = force))
让我们看看下一段代码是否能满足您的需求:
data("iris")
#vector from factor levels
strtest <- levels(iris$Species)
#We build the "label" and leave the result as a list
labels <- lapply(strtest, function(x) bquote(.(x)^'0m,0f'))
#Plotting
ggplot(iris,aes(x = Sepal.Length, y = Species))+
geom_point() +
#we use do.call to "apply" function 'expression' to each element of the list label
scale_y_discrete(labels=do.call(expression,labels))
结果: