ggplot2折线图给出了“geom_path:每个组只包含一个观察值。 你需要调整团体审美吗?“

有了这个dataframe(“DF”):

year pollution 1 1999 346.82000 2 2002 134.30882 3 2005 130.43038 4 2008 88.27546 

我尝试创build一个这样的折线图:

  plot5 <- ggplot(df, aes(year, pollution)) + geom_point() + geom_line() + labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore") 

我得到的错误是:

geom_path:每个组只包含一个观察值。 你需要调整团体审美吗?

即使我想要一个折线图,该图表也会显示为散点图。 我尝试用geom_line(aes(group = year))replacegeom_line() ,但是没有成功。

在一个答案中,我被告知将年份转换为因子variables。 我做了,问题依然存在。 这是str(df)dput(df)

 'data.frame': 4 obs. of 2 variables: $ year : num 1 2 3 4 $ pollution: num [1:4(1d)] 346.8 134.3 130.4 88.3 ..- attr(*, "dimnames")=List of 1 .. ..$ : chr "1999" "2002" "2005" "2008" structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list( c("1999", "2002", "2005", "2008")))), .Names = c("year", "pollution"), row.names = c(NA, -4L), class = "data.frame") 

您只需将group = 1添加到ggplot或geom_line aes()中即可。

对于折线图,必须对数据点进行分组,以便知道要连接的点。 在这种情况下,很简单 – 所有点都应该连接,所以group = 1。 当使用更多variables并绘制多行时,行的分组通常由variables完成。

参考:食谱R,章:graphicsBar_and_line_graphs_(ggplot2),线图。

尝试这个:

 plot5 <- ggplot(df, aes(year, pollution, group = 1)) + geom_point() + geom_line() + labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore") 

你得到这个错误是因为你的一个variables实际上是一个因子variables。 执行

 str(df) 

检查这一点。 然后做这个双variables来保持年份数字,而不是转换成“1,2,3,4”级别的数字:

 df$year <- as.numeric(as.character(df$year)) 

编辑:看来你的data.frame有一个类“数组”的variables,这可能会导致PB。 然后尝试:

 df <- data.frame(apply(df, 2, unclass)) 

和plto

在新的会话中启动R,并将其粘贴到:

 library(ggplot2) df <- structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list( c("1999", "2002", "2005", "2008")))), .Names = c("year", "pollution"), row.names = c(NA, -4L), class = "data.frame") df[] <- lapply(df, as.numeric) # make all columns numeric ggplot(df, aes(year, pollution)) + geom_point() + geom_line() + labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore")