【问题标题】:Cannot conditionally make axis labels bold in ggplot无法有条件地在ggplot中使轴标签加粗
【发布时间】:2023-01-30 04:13:21
【问题描述】:

我正在尝试根据来自不同列的条件将选择轴标签设为粗体。在下面的代码中,如果 Signif 等于 1,则 Predictor 轴文本应为粗体。此外,段应按Values 增加值的顺序出现。

但是,此代码并未将任何轴文本更改为粗体。

library(tidyverse)
library(ggtext)
library(glue)

df <- tibble(Predictor = c("Blue","Red","Green","Yellow"),
             Value = c(1,3,2,4),
             Signif = c(0,1,0,1))

df <- df %>% mutate(Predictor = ifelse(Signif==1,
                                 glue("<span style = 'font-weight:bold'>{Predictor}</span>"),
                                 glue("<span style = 'font-weight:plain'>{Predictor}</span>"))
)

df %>% 
  arrange(desc(Value)) %>% 
  mutate(Predictor=factor(Predictor, 
                          levels=df$Predictor[order(df$Value)])) %>%
  ggplot(aes(x=Predictor, y=Value)) +
  geom_segment(aes(xend=Predictor, yend=0)) +
  theme(axis.text.x = element_markdown())

相反,如果我在最后一行使用 element_text(),并跳过上面的 mutate 降价步骤:

df %>% 
  arrange(desc(Value)) %>% 
  mutate(Predictor=factor(Predictor, 
                          levels=df$Predictor[order(df$Value)])) %>%
  ggplot(aes(x=Predictor, y=Value)) +
  geom_segment(aes(xend=Predictor, yend=0)) +
  theme(axis.text.x = element_text(face = if_else(df$Signif==1, "bold", "plain"))) 

它将第 2 和第 4 轴标签加粗,对应于原始 df 中的 Signif 等于 1。

如何让正确的轴文本标签以粗体显示?

【问题讨论】:

    标签: r ggplot2 ggtext


    【解决方案1】:

    我本来希望你的代码能正常工作,但你可以使用 &lt;b&gt; 而不是 &lt;span style...&gt;

    library(tidyverse)
    library(ggtext)
    library(glue)
    
    df <- df %>% 
      mutate(Predictor = ifelse(Signif==1,
                                glue("<b>{Predictor}</b>"),
                                Predictor))
    
    df %>% 
      arrange(desc(Value)) %>% 
      mutate(Predictor=factor(Predictor, 
                              levels=df$Predictor[order(df$Value)])) %>%
      ggplot(aes(x=Predictor, y=Value)) +
      geom_segment(aes(xend=Predictor, yend=0)) +
      theme(axis.text.x = element_markdown())
    

    【讨论】:

      【解决方案2】:

      问题是 ggtext 目前只支持一组有限的 CSS 属性。来自docs

      当前支持 CSS 属性颜色、字体大小和字体系列。

      但是,如果您只想使用粗体文本,@zephryl 的答案是可行的方法,或者作为第二个选项使用降价,即包装在** 内:

      library(ggplot2)
      library(dplyr)
      library(ggtext)
      library(glue)
      
      df <- df %>%
        mutate(Predictor = ifelse(Signif == 1,
          glue("**{Predictor}**"),
          Predictor
        ))
      
      df %>%
        arrange(desc(Value)) %>%
        mutate(Predictor = factor(Predictor,
          levels = df$Predictor[order(df$Value)]
        )) %>%
        ggplot(aes(x = Predictor, y = Value)) +
        geom_segment(aes(xend = Predictor, yend = 0)) +
        theme(axis.text.x = element_markdown())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多