提问人:megashigger 提问时间:11/23/2014 最后编辑:Gregor Thomasmegashigger 更新时间:2/20/2022 访问量:413398
ggplot2 折线图给出“geom_path:每组仅包含一个观测值。你需要调整群体审美吗?
ggplot2 line chart gives "geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?"
问:
使用此数据框 (“df”):
year pollution
1 1999 346.82000
2 2002 134.30882
3 2005 130.43038
4 2008 88.27546
我尝试创建这样的折线图:
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()
geom_line(aes(group = year))
在回答中,我被告知将年份转换为因子变量。我做到了,问题仍然存在。这是 和 的输出: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")
答:
您收到此错误是因为其中一个变量实际上是一个因子变量 .执行
str(df)
来检查这一点。 然后进行此双变量更改以保留年份数字,而不是转换为“1,2,3,4”级别的数字:
df$year <- as.numeric(as.character(df$year))
编辑:似乎您的 data.frame 有一个类为“array”的变量,这可能会导致 pb。 然后尝试:
df <- data.frame(apply(df, 2, unclass))
又阴谋了?
评论
在新会话中启动 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")
评论
pollution
是一个一维数组,而不是一个普通向量。看str(df)
你只需要添加到 ggplot 或geom_line aes()。group = 1
对于折线图,必须对数据点进行分组,以便知道要连接哪些点。在这种情况下,它很简单——所有点都应该连接起来,所以 group=1。当使用更多变量并绘制多条线时,线的分组通常按变量完成。
参考资料:R 说明书,章节:图形 Bar_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")
评论
group
color
geom_line()
group = 1
我在数据框中遇到了类似的问题:
group time weight.loss
1 Control wl1 4.500000
2 Diet wl1 5.333333
3 DietEx wl1 6.200000
4 Control wl2 3.333333
5 Diet wl2 3.916667
6 DietEx wl2 6.100000
7 Control wl3 2.083333
8 Diet wl3 2.250000
9 DietEx wl3 2.200000
我认为 x 轴的变量应该是数字,这样geom_line知道如何连接点来画线。
在我将第二列更改为数字之后:
group time weight.loss
1 Control 1 4.500000
2 Diet 1 5.333333
3 DietEx 1 6.200000
4 Control 2 3.333333
5 Diet 2 3.916667
6 DietEx 2 6.100000
7 Control 3 2.083333
8 Diet 3 2.250000
9 DietEx 3 2.200000
然后它起作用了。
我得到了类似的提示。这是因为我以某个百分比指定了 x 轴(例如:10%A、20%B,....)。 因此,另一种方法是将这些值相乘并以最简单的形式编写它们。
我发现,如果绘制的大部分数据都超出了轴限制,也会发生这种情况。在这种情况下,请相应地调整轴缩放。
评论
df
dput(df)