繁体   English   中英

如何在堆叠图中使用 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 您可以将标签组合成您想要的样子。

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) for 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"))

这是输出:

在此处输入图片说明

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM