【问题标题】:How to highlight geom_text in ggplot that matches certain text如何在ggplot中突出显示与某些文本匹配的geom_text
【发布时间】:2021-04-16 17:57:33
【问题描述】:

我想在 ggplot 散点图中突出显示某个文本。我的代码在这里

library(ggplot2)

labels <- c("green", "blue", "orange", "blue", "green","red","purple","black")
num_1 <- c(1,2,3,4,5,6,7,8)
num_2 <- c(5,9,3,7,4,3,1,8)
df <- data.frame(labels,num_1,num_2)

p <- ggplot(df, aes(num_1,num_2,label=labels)) + geom_text() 
p

例如,我想通过将其字体更改为粗体或将其颜色更改为黄色来突出显示文本“绿色”。要么工作,但我无法让它工作。我已经尝试使用 gghighlight,但还没有找到让它工作的方法。

【问题讨论】:

    标签: r ggplot2 data-visualization


    【解决方案1】:

    您的三个建议都有效。使用 gghighlight,您必须为要突出显示的数据点设置谓词:

    library(ggplot2)
    
    labels <- c("green", "blue", "orange", "blue", "green","red","purple","black")
    num_1 <- c(1,2,3,4,5,6,7,8)
    num_2 <- c(5,9,3,7,4,3,1,8)
    df <- data.frame(labels,num_1,num_2)
    
    ggplot(df, aes(num_1,num_2,label=labels)) + 
      geom_text() +
      gghighlight::gghighlight(labels == "green")
    #> Warning: Tried to calculate with group_by(), but the calculation failed.
    #> Falling back to ungrouped filter operation...
    

    如果你想留在原版ggplot2,你可以简单地在aes()函数中使用ifelse()

    ggplot(df, aes(num_1, num_2, label= labels)) +
      geom_text(aes(fontface = ifelse(labels == "green", "bold", "plain")))
    

    如果您想直接设置颜色,而不先将它们映射到比例,您可以使用I() 函数来使用不映射/转换数据的身份比例。

    ggplot(df, aes(num_1, num_2, label= labels)) +
      geom_text(aes(colour = I(ifelse(labels == "green", "yellow", "black"))))
    

    reprex package (v1.0.0) 于 2021-04-16 创建

    【讨论】:

    • 将“绿色”涂成黄色有多有趣... ;)(我知道这是 OP 的要求)+1
    猜你喜欢
    • 2023-04-04
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多