【问题标题】:How do I add a superscripted comma and a space in a ggplot2 axis tick label?如何在 ggplot2 轴刻度标签中添加上标逗号和空格?
【发布时间】:2020-06-26 15:59:48
【问题描述】:

我正在尝试为 ggplot2 中的 y 轴刻度标签添加上标。我希望标签看起来像这样:

ATRS20m,0f(其中 0f 和 0m 为上标)。这会产生如下所示的错误。

解析错误(文本 = 级别(diff_30$Station)):
:1:8: 意外符号
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))))

任何帮助都会很棒。谢谢!

【问题讨论】:

    标签: r ggplot2 axis-labels superscript


    【解决方案1】:

    让我们看看下一段代码是否能实现您正在寻找的技巧:

    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))
    

    结果:

    【讨论】:

    • 感谢您的帮助。对不起,我花了这么长时间才看到它。效果很好!
    • 别担心,伙计 :) 很高兴它有帮助
    【解决方案2】:

    bquote() 究竟是如何让您感到困惑的?由于公式帽子后面的数字,请将您的上标放在引号中! Tha应该可以解决您的问题...

    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))
    

    【讨论】:

    • 这里不需要感叹号。另外,我没有说上标应该在不同的轴上。它们需要在同一个标​​签上,并且在轴刻度标签上。
    猜你喜欢
    • 2011-02-27
    • 2017-09-23
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2012-03-14
    相关资源
    最近更新 更多