ggplot从堆叠的条形图中更改一个条的颜色

时间:2018-09-19 06:31:09

标签: r ggplot2

是否可以在ggplot中手动更改一个条形(x-值)的颜色

数据

for_plot_test=structure(list(name = c("A", "B", 
                        "C", "A1", "A2", "A3", 
                        "A4", "BI", "A", "B", 
                        "C", "A1", "A2", "A3", 
                        "A4", "BI"), n = c(1L, 3L, 5L, 7L, 9L, 11L, 13L, 15L, 2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L),
                        value = c(0, 0.05, 0, 0.05, 0.05, 0.1, 0.05, 0, 1, 0.7, 0.6, 0.5, 0.4, 0.2, 0.2, 0.1),
                        variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
                        .Label = c("PROGRESS", "prev_progress"), class = "factor")),
                        class = c("grouped_df", "tbl_df", "tbl", "data.frame"),
                        row.names = c(NA, -16L), vars = "name", labels = structure(list(name = c("Applications", "BI", "Clients", "CRE & Scoring", "Portfolio & Production", "SG Russia", "Transactions", "УКЛ & Prescoring")),
                        row.names = c(NA, -8L), class = "data.frame", vars = "name", drop = TRUE,
                        indices = list(0:1, 14:15, 6:7, 10:11, 2:3, 12:13, 8:9, 4:5),
                        group_sizes = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
                        biggest_group_size = 2L, .Names = "name"), 
                        indices = list(c(0L, 8L), c(7L, 15L), c(3L, 11L), c(5L, 13L), c(1L, 9L), c(6L, 14L), c(4L, 12L), c(2L, 10L)),
                        drop = TRUE, group_sizes = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), biggest_group_size = 2L,
                        .Names = c("name", "n", "value", "variable"))

当前情节

colot_progress=c("#be877a","#dcbfad")

s <- ggplot(for_plot_test, aes(x= reorder(name, -n),y = value, fill = variable,label=ifelse(for_plot$value==0,"",scales::percent(for_plot$value))))+
  geom_bar(stat='identity',position = "stack")+
  scale_fill_manual(values=colot_progress,aesthetics = "fill")+
  coord_flip()+

  theme_minimal() +  theme(
    axis.title = element_blank(),
    axis.text.x=element_blank(),
    panel.grid = element_blank(),
    legend.position="none" 

  )+
  geom_text(size = 5, position = position_stack(vjust = 0.5))
s

欲望结果的例证 enter image description here

1 个答案:

答案 0 :(得分:1)

为列variable创建另一个级别。

library(dplyr)
for_plot_test1 <-
  for_plot_test %>%
  group_by(name) %>%
  summarise(n = n()) %>%
  mutate(value = ifelse(name == "A", 1, 0), variable = "dummy") %>%
  full_join(for_plot_test %>% mutate(value = replace(value, name == "A", 0)))
for_plot_test1$variable <- factor(for_plot_test1$variable,
                                  levels = c("dummy", "PROGRESS", "prev_progress"))
colot_progress <- c("limegreen", "#be877a", "#dcbfad")

s <- ggplot(for_plot_test1,
         aes(
           x = reorder(name,-n),
           y = value,
           fill = variable,
           label = ifelse(value == 0, "", scales::percent(value))
         )) +
  geom_bar(stat = 'identity', position = "stack") +
  scale_fill_manual(values = colot_progress, aesthetics = "fill") +
  coord_flip() +
  theme_minimal() +  theme(
    axis.title = element_blank(),
    axis.text.x = element_blank(),
    panel.grid = element_blank(),
    legend.position = "none"

  ) +
  geom_text(size = 5, position = position_stack(vjust = 0.5))
s

enter image description here