您可以通过以下参数将类别设置为显示在图例中来实现此breaks目的scale_fill_discrete:
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)
Run Code Online (Sandbox Code Playgroud)

编辑如果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)
Run Code Online (Sandbox Code Playgroud)
