it-swarm.com.de

Das Liniendiagramm ggplot2 gibt "geom_path: Jede Gruppe besteht aus nur einer Beobachtung. Müssen Sie die Gruppenästhetik anpassen?"

Mit diesem Datenrahmen ("df"):

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

Ich versuche so ein Liniendiagramm zu erstellen:

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

Der Fehler, den ich erhalte, ist:

geom_path: Jede Gruppe besteht aus nur einer Beobachtung. Müssen Sie die Gruppenästhetik anpassen?

Das Diagramm wird als Punktdiagramm angezeigt, obwohl ich ein Liniendiagramm haben möchte. Ich habe versucht, geom_line() durch geom_line(aes(group = year)) zu ersetzen, aber das hat nicht funktioniert.

In einer Antwort wurde mir gesagt, dass ich das Jahr in eine Faktorvariable umwandeln soll. Ich habe und das Problem besteht weiterhin. Dies ist die Ausgabe von str(df) und 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")
131
megashigger

Sie müssen nur group = 1 In den ggplot oder die geom_line aes () einfügen.

Bei Liniendiagrammen müssen die Datenpunkte gruppiert werden, damit bekannt ist, welche Punkte verbunden werden müssen. In diesem Fall ist es einfach - alle Punkte sollten verbunden sein, also group = 1. Wenn mehr Variablen verwendet und mehrere Linien gezeichnet werden, erfolgt die Gruppierung für Linien normalerweise nach Variablen.

Referenz: Kochbuch für R, Kapitel: Diagramme Balken- und Liniengraphen (ggplot2), Liniendiagramme.

Versuche dies:

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")
269
Mario Barbé

Sie erhalten diesen Fehler, weil eine Ihrer Variablen tatsächlich eine Faktorvariable ist. Ausführen

str(df) 

um dies zu überprüfen. Führen Sie dann diese doppelte Variablenänderung durch, um die Jahreszahlen beizubehalten, anstatt sie in Zahlen der Stufe "1,2,3,4" umzuwandeln:

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

BEARBEITEN: Es scheint, dass Ihr data.frame eine Variable der Klasse "array" hat, die das pb verursachen könnte. Versuchen Sie dann:

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

und wieder Handlung?

20
agenis

Starten Sie R in einer neuen Sitzung und fügen Sie dies ein in:

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")
1
G. Grothendieck

Ich hatte ein ähnliches Problem mit dem Datenrahmen:

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

Ich denke, die Variable für die x-Achse sollte numerisch sein, damit geom_line weiß, wie man die Punkte verbindet, um die Linie zu zeichnen.

nachdem ich die 2. Spalte in numerisch geändert habe:

 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

dann klappt es.

0
user3446619