使用ggplot2在R中的Barplot中的垂直平均线

时间:2018-01-19 15:04:41

标签: r ggplot2

我是R的新手,但我正试图在ggplot2库的条形图中创建垂直平均线。

我当前的图表按年份分组,每个彩色条代表不同的年龄。 y轴是计数: mygraph

我希望每年按每组的垂直平均线(即第1年的平均年龄线,第2年的平均年龄线等)

这是我到目前为止所写的:

library(ggplot2)
AgeDat<-read.csv(File Name)
columnmeans<-c("MeanValue", "MeanValue", "MeanValue"..."MeanValue")
SepAgePlot<-ggplot(AgeDat, aes(factor(Year), Count, fill=(factor(Age))))+
  geom_bar(stat="identity", position="dodge")+ 
  SepAgePlot+(geom_vline(data=AgeDat, xintercept = columnmeans)+
  theme_classic()
SepAgePlot+labs (x="Year", y="count", title="my graph")

提前感谢您的帮助!

UDPATE: 这将是一个示例数据集:

Year    Age Count
1964    31  15
1964    33  23
1964    34  54
1964    35  8
1964    36  44
1964    37  21
1964    38  23
1964    39  26
1964    40  23
1965    30  22
1965    31  23
1965    32  45
1965    33  55
1965    34  23
1965    35  10
1965    36  12
1965    37  16
1965    38  32
1965    39  36
1965    40  13
1966    30  27
1966    31  32
1966    32  19
1966    33  45
1966    34  35
1966    35  60
1966    36  15
1966    37  28
1966    38  56
1966    39  18
1966    40  25
1967    30  36
1967    31  32
1967    32  23
1967    33  9
1967    34  15
1967    35  0
1967    36  5
1967    37  7
1967    38  24
1967    39  31
1967    40  24

每年的平均年龄是:

1964 35.4

1965 35.6

1966 35.0

1967 34.6

我的目标是创建按年度分组的数据的条形图,其中一条线代表每年的平均年龄。

1 个答案:

答案 0 :(得分:1)

您可以使用dplyr软件包中的group_bysummarise函数添加每年平均年龄的列:

AgeDat <- AgeDat %>% group_by(Year) %>% summarise(MeanValue=sum(Age*Count)/sum(Count)) %>% inner_join(AgeDat, .)
AgeDat
    Year Age Count MeanValue
1   1964  30    44  34.64545
2   1964  31    44  34.64545
3   1964  32    46  34.64545
4   1964  33    35  34.64545
5   1964  34    83  34.64545
6   1964  35    70  34.64545
7   1964  36    73  34.64545
8   1964  37    85  34.64545
9   1964  38    31  34.64545
10  1964  39    39  34.64545
11  1965  30   100  34.65485
12  1965  31    19  34.65485

然后,您可以使用geom_vline为每年添加一条垂直线,并使用facet_wrap按年份分配年龄分布:

ggplot(AgeDat) + 
    geom_bar(aes(x=Age, y=Count), stat="identity", position="dodge") + 
    geom_vline(aes(xintercept=MeanValue)) + 
    facet_wrap(~Year, nrow=1) + 
    theme_classic()

enter image description here