我每年都获得有关频率的数据。我用ggplot2描绘了这些数据(x年; y - 频率)。现在我想通过将1980年下面的所有条形图用红色和所有条形图等于或高于1980绿色来分隔条形图。我怎么能这样做 - 下面是我的MWE试图用scale_fill_manual设置这些边界,因为我没有正确地执行它而无效。
数据
dput(allePubs2)
structure(list(Jahr = 1922:2015, Publikationen = c(1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L,
0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 2L, 0L, 0L, 0L, 1L, 0L, 1L, 4L,
2L, 3L, 2L, 2L, 4L, 1L, 4L, 1L, 3L, 6L, 1L, 2L, 2L, 3L, 1L, 2L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 12L, 4L, 5L, 14L, 9L, 6L, 5L, 7L,
5L, 6L, 4L, 7L, 3L, 7L, 6L, 7L, 8L, 6L, 4L, 14L)), .Names = c("Jahr",
"Publikationen"), row.names = c(NA, -94L), class = "data.frame")
MWE尝试
cutoff80 <-
ggplot(data=allePubs2, aes(x=Jahr, y=Publikationen)) +
geom_bar(stat="identity", width = 0.5)+
scale_y_continuous(name="Anzahl Publikationen", breaks = 0:14, limits = c(0, 15))+
scale_x_continuous(name="Jahr", breaks = c(1920, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975,
1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015),
limits = c(1920, 2016))+
ggtitle("Cut-Off bei 1980")+
theme_hc() +
geom_vline(xintercept = 1979.5)+
scale_fill_manual(breaks = c("1922", "1979","1980","2016"),
values=c("red", "red", "green", "green"))
cutoff80
答案 0 :(得分:1)
您可以在数据框中添加一个可用于控制条形颜色的变量:
allePubs2$before1980 <- factor(allePubs2$Jahr < 1980,
levels = c(TRUE, FALSE),
labels = c("vor 1980", "nach 1980"))
在这里,我使用factor
将逻辑变量转换为因子。标签稍后将在图例中使用,因此在此适当选择它们非常重要。
现在,您可以将before1980
映射到颜色,就像将Jahr
映射到x坐标一样:
library(ggplot2)
ggplot(data=allePubs2, aes(x=Jahr, y=Publikationen, fill = before1980)) +
geom_bar(stat="identity", width = 0.5)+
scale_y_continuous(name="Anzahl Publikationen", breaks = 0:14, limits = c(0, 15))+
scale_x_continuous(name="Jahr", breaks = seq(1920, 2015, by = 5),
limits = c(1920, 2016))+
ggtitle("Cut-Off bei 1980")+
geom_vline(xintercept = 1979.5)+
scale_fill_manual(name = "", values = c("vor 1980" = "red", "nach 1980" = "green"))
我还定义了一个手动刻度,确保颜色与您希望的颜色一致。请注意如何将某个值与"vor 1980" = "red"
的颜色相关联。 name
参数可用于设置图例的标题,我已根据您的要求将其设置为空。
我还使用scale_y_continuous()
简化了seq
的中断并删除了theme_hc()
,因为我不知道该函数的来源。