如何在ggplot中添加点和线以按年求和?

时间:2018-12-17 03:18:12

标签: r ggplot2

Year <- c(1995, 1995, 1995, 1995, 1996, 1996, 1996, 1996, 1997, 1997, 1997, 1997)
Quarter <- c(1,2,3,4,1,2,3,4,1,2,3,4)
GDP <- c(19,20,23,24,15,16,18,19,34,18,14,19)

df <- data.frame(Year,Quarter,GDP)

   Year Quarter GDP
1  1995       1  19
2  1995       2  20
3  1995       3  23
4  1995       4  24
5  1996       1  15
6  1996       2  16
7  1996       3  18
8  1996       4  19
9  1997       1  34
10 1997       2  18
11 1997       3  14
12 1997       4  19

我想得到一个图,其中包含每年总和的积分,以及一条连接这些积分的线。到目前为止,我已经使用

df %>%
ggplot(aes(x=Year, y=GDP))+
  stat_summary(fun.y = sum, geom="point")+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

获取每年总和的积分,但是改用geom = "line"(或什至同时使用两者)会返回错误:     geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

我如何用两个点(代表总和)和一条连接它们的线来制作该图?谢谢。

编辑1:在group = 1的{​​{1}}调用中添加aes()解决了该问题。 @Ronak Shah提出了两种可能的解决方案,它们可以用于此示例数据框,但不适用于我的项目。将进一步调查。

编辑2:原来我使用的“年份”存储为ggplot;一旦将其更改为chr,一切都会按预期进行。

2 个答案:

答案 0 :(得分:1)

为什么不先总结然后再绘图?

library(tidyverse)

df %>%
  group_by(Year) %>%
  summarise(GDP = sum(GDP)) %>%
  ggplot() + 
  aes(Year, GDP) + 
  geom_point() + geom_line() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

enter image description here

答案 1 :(得分:0)

检查了相关问题后(对不起,我),在group=1通话中添加aes()可解决此问题。

df %>%
ggplot(aes(x=Year, y=GDP, group = 1))+
  stat_summary(fun.y = sum, geom="point")+
  stat_summary(fun.y = sum, geom="line")+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))