ggplot2折线图给出了“geom_path”:每组只包含一个观测值。是否需要调整群体审美?

对于这个数据帧("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:每个组只包含一个观测值。你需要 调整群体审美?< / p >

虽然我想要折线图,但图表显示为散点图。我尝试用geom_line(aes(group = year))替换geom_line(),但这行不通。

在回答中,我被告知要将年份转换为一个因子变量。我做了,但问题仍然存在。这是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")
373416 次浏览
你得到这个错误是因为你的一个变量实际上是一个因子变量 . 执行< / p >
str(df)

来检查这个。 然后进行这个双变量更改,以保持年份数字,而不是转换为“1,2,3,4”级别的数字:

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

编辑:似乎你的data.frame有一个类“array”的变量,这可能会导致pb. frame被删除。 试一试:< / p >

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

你只需要将group = 1添加到ggplot或geom_line aes()中。

对于线形图,必须对数据点进行分组,以便它知道要连接哪些点。在这种情况下,它很简单——所有点都应该连接,因此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 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,....)。 因此,另一种方法是将这些值相乘,并将它们写成最简单的形式

我发现,如果绘制的大部分数据超出了轴的限制,也会发生这种情况。在这种情况下,相应调整轴刻度。