我想为不同的数据分组创建一个带有三个不同图例的堆叠条形图。
例如,给定以下数据帧:
Year <- as.factor(c(rep(1, 10), rep(2, 10), rep(3,10), rep(4,10), rep(5,10), rep(6,10)))
Category <- as.factor(c(rep("a", 15), rep("b", 10), rep("c", 10), rep("d",10), rep("e", 10), rep("f", 5)))
Region <- as.factor(c(rep("region1", 25), rep("region2", 20), rep("region3",15)))
data <- data.frame(Year, Category, Region)
我想用年绘制每个类别计数的堆积条形图。
ggplot() + geom_bar(data=data,aes(x=Year, fill=Category))
然而,我不希望有一个类别的传奇(如上所述),我希望有三个传说,按类别按类别子集(即标题为&#34;区域1和#34的图例;将显示类别&#34; a&# 34;和&#34; b&#34 ;;标题为&#34; region2&#34;的图例将显示类别&#34; c&#34;和&#34; d&#34 ;;以及标题为&#的图例34; region3&#34;将显示类别&#34; e&#34;和&#34; f&#34;。
我试过引用这两个主题: Legends for multiple fills in ggplot和 R: Custom Legend for Multiple Layer ggplot。 但是,我没有运气将它们应用到一个条形图。任何帮助将不胜感激!
答案 0 :(得分:0)
这样的事情:
ggplot() + geom_bar(data=data,aes(x=Year, fill=Category, color=Region)) +
scale_fill_brewer(palette="Greens") +
scale_color_manual(values = c("red", "black", "grey"))
使用scale_color_manual进行自定义。您可以从http://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3
中获得灵感答案 1 :(得分:0)
你有时可以通过将图层映射到其他美学,然后使用override.aes
使基于这些美学的图例看起来像你想要的那样,以“硬”的方式做这种事情。它不漂亮。
以下是一个示例,其中fill
图例被抑制,并通过color
,size
和alpha
为三个“区域”子集创建了图例。< / p>
首先,获取6种颜色的 ggplot2 颜色,如here所示。
gg_color_hue = function(n) {
hues = seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
cols = gg_color_hue(6)
包含三个无关的geom_point
图层,仅用于将三个图例添加到图中;通过将size
设置为0或color
设置为NA,可以抑制实际点数。
然后是guide_legend
中的混乱工作,其中每个图例都会更改为根据上面的cols
显示正确的颜色。更改图例名称并设置图例顺序。
ggplot(data = data, aes(x = Year) ) +
geom_bar( aes(fill = Category), show.legend = FALSE ) +
geom_point(data = subset(data, Category %in% c("a", "b") ),
aes(color = Category), stat = "count", size = 0) +
geom_point(data = subset(data, Category %in% c("c", "d") ),
aes(size = Category), stat = "count", color = NA) +
geom_point(data = subset(data, Category %in% c("e", "f") ),
aes(alpha = Category), stat = "count", size = 0) +
guides(color = guide_legend(title = "Region 1", order = 1,
override.aes = list(shape = 15, size = 5, color = cols[1:2]) ),
size = guide_legend(title = "Region 2", order = 2,
override.aes = list(shape = 15, size = 5, color = cols[3:4]) ),
alpha = guide_legend(title = "Region 3", order = 3,
override.aes = list(shape = 15, size = 5, color = cols[5:6], alpha = 1) ) ) +
theme(legend.key = element_rect(fill = "white") )