【问题标题】:Only displaying some legend contents只显示部分图例内容
【发布时间】:2023-01-29 17:26:16
【问题描述】:

我有兴趣只显示我的 ggplot2 图例中最丰富的前 3 个组。

例如,在这个表中,我有 7 个组,我只想在我的 ggplot2 图例中显示组 D、E、F

group sample size
A 2
B 3
C 1
D 25
E 23
F 20
G 3

我尝试在线搜索,但我得到的最接近的答案是重新排序图例。

提前致谢!

干杯, 梅尔

【问题讨论】:

  • 你想做什么样的情节?根据您提供的数据,尚不清楚哪里需要图例。
  • 请提供reproducible example并显示您尝试过的代码。

标签: r ggplot2 legend


【解决方案1】:

您可以通过 scale_fill_discretebreaks 参数将类别设置为显示在图例中来实现此目的:

df <- data.frame(
             group = c("A", "B", "C", "D", "E", "F", "G"),
       sample.size = c(2L, 3L, 1L, 25L, 23L, 20L, 3L)
)

library(ggplot2)
library(dplyr)

top_group <- df %>% top_n(3, sample.size) %>% pull(group)

ggplot(df, aes(group, sample.size, fill = group)) +
  geom_col() +
  scale_fill_discrete(breaks = top_group)

编辑scale_fill_manual 的情况下,一种选择是命名您的颜色列表。这还有一个额外的好处,即您可以将颜色分配给名称或类别,而无需担心将颜色传递给比例尺的 values 参数的顺序:

# Example color palette
colourslist <- scales::hue_pal()(length(unique(df$group)))
# Name your list of colors
names(colourslist) <- unique(df$group)

ggplot(df, aes("1", sample.size, fill = group)) +
  geom_col(width = 1, color="darkgrey") +
  scale_fill_manual(values = colourslist, breaks = top_group) +
  coord_polar("y", start = 0)

【讨论】:

  • 这可能回答了部分问题(赞成票),但它手动执行“仅显示前 3 个最丰富的组”。您可能想用新列注释每一行以突出显示这 3 个最丰富的组,然后使用 scale_colour_manual()
  • 我相信您知道,与其费力地拼出 c("A", "B", "C", "D", "E", "F", "G"),您还可以写成 LETTERS[1:7] ... ;)
  • @tjebo 感谢上帝,datapasta 为我完成了这项工作。 :D
  • 不敢相信我直到现在才知道这个 :D
  • @tjebo 哈哈,是的,我不经常使用它,但是 datapasta 很高兴知道您是否必须(快速)从 PDF 或 XL 或 HTML 表格复制和粘贴数据。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多