同一图中的不同配色方案

时间:2019-07-17 12:35:23

标签: r

我的数据集看起来类似于

df <- data.frame(name = rep(letters[1:4], each = 3), category = rep(1:2, each = 6), 
                 time = rep(1:3, times = 4), value = sample(1:100, 12))

我想要一个堆叠的条形图,以显示每个名称随时间的价值,但我希望这些名称根据其类别具有不同的配色方案。

在此示例中,我有一个像这样的情节

enter image description here

现在,我希望名称a和b与名称c和d具有不同的配色方案,因为它们属于不同的类别。我知道我可以根据类别进行分类,但是出于某些特殊原因,我希望所有信息都显示在一张图表上。我该怎么办?

2 个答案:

答案 0 :(得分:2)

一个选项:

df$cat.time <- paste0(df$category, ".", df$time)
ggplot(df, aes(x=name, y=value, fill=factor(cat.time))) + geom_bar(stat="identity")

结果:

enter image description here

然后您可以使用scale_fill_manual来调整配色方案:

pal <- c(colorRampPalette(c("yellow", "DarkGreen"))(3), 
         colorRampPalette(c("red", "NavyBlue"))(3))

ggplot(df, aes(x=name, y=value, fill=factor(cat.time))) + 
   geom_bar(stat="identity") + scale_fill_manual(values=pal) 

答案 1 :(得分:1)

此解决方案使用透明度因子alpha来使每个栏中的颜色有所不同。

ggplot(df,
       aes(x = name, y = value, alpha = factor(time), fill = factor(category))) +
  geom_bar(stat = "identity") +
  scale_alpha_manual(name = "Time", values = c(0.3, 0.5, 1)) +
  scale_fill_manual(name = "Category", values = c("#1f78b4", "#33a02c")) +
  theme_classic()

enter image description here