2016-04-26 179 views
1

我正在制作一个饼图,内容为ggplot2,但我无法获得正确的馅饼切片的颜色。着色方案饼图,ggplot2

df <- data.frame(group = c("Information technology", "Laboratory", "Tools", 
          "Unspecified", "Other"), 
       value = c(2500, 2000, 1500, 1000, 4000)) 

# Coloring scheme 
blue1 <- "#0a3250" # darkest blue 
blue2 <- "#13517b" 
blue3 <- "#2f659f" 
blue4 <- "#518ecb" 
blue5 <- "#aac8df" 
blue6 <- "#d6e7f2" # lightest blue 
colorscheme <- scale_fill_manual(values = c(blue1, blue2, blue3, 
              blue4, blue5, blue6)) 
# Data labels: 
df <- df[!is.na(df$value),] # Only keeps non-zero segments 
lbls <- df$value/sum(df$value) 
lbls <- percent(lbls)   # Converts to string and adds % sign 
lbls[lbls == "0.0%"] <- ""  # Removes 0.0% as a label 

# we now actually plot the data: 
ggplot(df, aes(x = "", y = value, fill = group)) + 
    colorscheme + 
    geom_bar(width = 1, stat = "identity", col = "white") + 
    xlab("") + ylab("") + 
    theme_bw() + 
    geom_text(aes(x  = 1.90, 
        y  = value/2 + c(0, cumsum(value)[-length(value)]), 
        label = lbls), size = 4) + 
    coord_polar(theta = "y") + 
    theme(
     axis.text  = element_blank(), 
     panel.grid  = element_blank(), 
     panel.border = element_blank(), 
     legend.key  = element_rect(fill=NULL, colour = "white"), 
     legend.key.size = unit(0.5, "cm"), 
     legend.title = element_blank(), 
     legend.text  = element_text(size = 9) 
) 

我想要什么:

我想在df中的第一项有颜色blue1,第二个条目blue2,等等。通过这种方式,片去按顺时针顺序从最暗蓝色亮蓝色。 此外,图例应以与df相同的顺序显示组。

的问题是什么:

但是,颜色不按指定位置在df,而是按字母顺序排列。现在,蓝色的不同色调分散在饼图片和传说中。

回答

1

使用系数为您分类变量:

df <- data.frame(group=factor(x=1:5, 
     labels=c("Information technology", "Laboratory", "Tools", "Unspecified", "Other")), 
       value = c(2500, 2000, 1500, 1000, 4000))