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")