如何在堆叠图中使用 scale_color_discrete 格式化图例并在 y 轴 r 中包含千位分隔符

How to format legend using scale_color_discrete in stacked plot and have thousand separators included in the y-axis r

我有这个数据集可以用来格式化图例并在 y 轴上包含千位分隔符;

Data <- tibble::tribble(
  ~Site,    ~Test,    ~Score1,      ~Score2,       ~Score3,
  "A",   "SD",  5904,    9691,    NA, 
  "B",   "SD",   2697,    4484,    NA,
  "A ",   "MB",  11418,    7666,      NA,
  "B",   "MB", 2517,    6445,    NA,
  "C",   "FO",  NA,    NA,    9588,
  "C",   "FI", NA,    NA,    5423,
  "C",   "NF",  NA,    NA,    1527
)

我使用了这个代码;

 library(dplyr)
 library(tidyr)
 library(ggplot2)

 Data %>% 
  pivot_longer(cols = -c(Site,Test)) %>%
   mutate(Test = factor(Test,
                           levels = c('SD','MB','FI','FO','NF'),
                           ordered = T)) %>%
   ggplot(aes(x=Site,y=value,fill=name, legend = TRUE))+
   ylim(0,20000) +
   ylab("Total score") +
   geom_bar(stat='identity')+
   facet_wrap(.~Test, scales = 'free_x', ncol = 5, strip.position = "bottom")+
   theme_minimal()+
   theme(strip.placement  = "outside",
         panel.spacing    = unit(0, "points"),
         strip.background = element_blank(),
         strip.background.y = element_blank(),
         panel.background = element_rect(fill = "white"),
         panel.grid.major = element_blank(),
         panel.grid.minor = element_blank(),
         panel.border = element_blank(), 
         strip.text       = element_text(face = "bold", size = 9))+
   scale_color_discrete(name = "Legend",label=c("Score 1","Score 2","Score 3"))

我未能在我的 y 值上正确标记我的图例和千位分隔符。

要获得正确名称的图例,请将 scale_color_discrete 更改为 scale_fill_discrete。您正在映射到填充美学而不是颜色美学。

要获取 y 标签,您可以添加 scale_y_continuous 和一些参数。您可以 assemble 使标签看起来像您想要的那样。

Data %>% 
  pivot_longer(cols = -c(Site,Test)) %>%
  mutate(Test = factor(Test,
                       levels = c('SD','MB','FI','FO','NF'),
                       ordered = T)) %>%
  ggplot(aes(x=Site,y=value,fill=name, legend = TRUE))+
  geom_bar(stat='identity')+
  facet_wrap(.~Test, scales = 'free_x', ncol = 5, strip.position = "bottom")+
  theme_minimal()+
  theme(strip.placement  = "outside",
        panel.spacing    = unit(0, "points"),
        strip.background = element_blank(),
        strip.background.y = element_blank(),
        panel.background = element_rect(fill = "white"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(), 
        strip.text       = element_text(face = "bold", size = 9))+
  scale_fill_discrete(name = "Legend", label=c("Score 1","Score 2","Score 3")) +
  scale_y_continuous(name = "Total Score", 
                     limits = c(0, 20000),  
                     breaks = seq(0, 20000, 5000), 
                     labels = c(0, paste(seq(5000, 20000, 5000)/1000, "000", sep = ","))) 

您唯一需要做的更改是:

  1. ylim(0, 20000) 对于 scale_y_continuous(labels = scales::comma_format())
  2. scale_color_discrete() 对于 scale_fill_discrete()
Data %>%
  pivot_longer(cols = -c(Site,Test)) %>%
  mutate(Test = factor(Test,
                       levels = c('SD','MB','FI','FO','NF'),
                       ordered = T)) %>%
  ggplot(aes(x = Site, y = value, fill = name, legend = TRUE)) +
  scale_y_continuous(labels = scales::comma_format()) +
  ylab("Total score") +
  geom_bar(stat = 'identity') +
  facet_wrap(. ~ Test, scales = 'free_x', ncol = 5, strip.position = "bottom") +
  theme_minimal() +
  theme(strip.placement  = "outside",
        panel.spacing    = unit(0, "points"),
        strip.background = element_blank(),
        strip.background.y = element_blank(),
        panel.background = element_rect(fill = "white"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(), 
        strip.text = element_text(face = "bold", size = 9)) +
  scale_fill_discrete(name = "Legend", label = c("Score 1", "Score 2", "Score 3"))

这是输出:

祝你好运!