2014-11-22 7 views
81

Mit diesem Datenrahmen ("df"):ggplot2 Liniendiagramm gibt "geom_path: Jede Gruppe besteht aus nur einer Beobachtung. Müssen Sie die Gruppenästhetik anpassen?"

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

Ich versuche, ein Liniendiagramm wie diese 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 I erhalten:

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

Das Diagramm erscheint als Streudiagramm, 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, Jahr zu einer Faktorvariablen zu konvertieren. Ich habe und das Problem besteht weiter. 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") 
+0

Es gibt keinen Fehler, wenn ich es laufen. Es ist wahrscheinlich, dass "df" nicht das ist, was Sie denken, dass es ist. Bitte geben Sie Ihre Frage in reproduzierbarer Form an, d. H. Zeigen Sie die Ausgabe von 'dput (df)' an. –

+0

könnte sein, dass Ihre Variablen Faktoren sind, dann müssten Sie sie in numerische konvertieren – beetroot

+0

@ G.Grothiedieck ich gepostet, was Sie gesagt haben. Ich konvertierte auch zu numerisch und habe immer noch das Problem. – megashigger

Antwort

168

Sie haben nur group = 1 in die ggplot oder geom_line aes hinzufügen() .

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

Referenz: Kochbuch für R, Kapitel: Graphen Bar_and_line_graphs_ (ggplot2), Liniendiagramme.

Try this:

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

Gruppe = 1 funktioniert für die angegebene Warnung. – Turcia

12

Sie diesen Fehler erhalten, weil eine Ihrer Variablen tatsächlich ein Faktor Variable ist. Führen Sie

str(df) 

aus, um dies zu überprüfen. Dann diese doppelte variable Änderung tun, um die Jahreszahlen statt Umwandlung in „1,2,3,4“ Level-Nummern zu halten:

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

EDIT: es scheint, dass Ihr data.frame eine Variable Klasse " Array ", die den pb verursachen könnte. Versuchen Sie dann:

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

und plto

+0

Ich habe die Konvertierung gemacht und es funktioniert immer noch nicht. – megashigger

+2

Dies ist für mich eine bequeme Antwort, weil es das Problem von der Wurzel beheben –

1

R in einer neuen Sitzung starten und fügen Sie diese 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") 
+0

Ich bekomme immer noch den Fehler. – megashigger

+0

Starten Sie R in einer neuen Sitzung und fügen Sie den Code in meinem Beitrag hinein. –

+0

Haben Sie dieses Problem herausgefunden. Ich habe das selbe Problem mit dem, das ich nur einen Wert für jeden x-Wert habe. Warte auf deine Antwort. Vielen Dank. –

Verwandte Themen