2017-10-22 6 views
1

Ich habe gerade angefangen, R zu lernen, und bin auf ein Problem mit der Konstruktion von Graphen gestoßen.Balkendiagramm/Liniendiagramm mit ggplot2

Ich habe eine df wo str (df) gibt

Date : chr 
Hour : int 
Street 1: int 
Street 2: int 
.. 
Street 15: int 

, wo das Datum jeden Tag des Monats ist, die Stunde ist jede Stunde des Tages und die Daten für die Straßen zeigt die Menge des Verkehrs für die Straße für die Stunde des Tages.

Ich möchte ein Balkendiagramm auf ggplot machen, das die Gesamtmenge des Verkehrs für jede Straße über den Monat zeigt, um die Straße mit dem schwersten Verkehr zu zeigen, aber wenn ich versuche, das Diagramm mit ggplot zu machen, schließt die Stundendaten auch ein was den Graphen ruiniert.

Ich schaute mir die verschiedenen Fragen an, die bereits beim Stack-Überlauf gestellt wurden und versuchte die Daten zu schmelzen, aber entweder habe ich das falsch gemacht oder es ist nicht für meine Daten geeignet, da es immer noch nicht funktionierte.
ich war, indem Sie eine sehr einfache Lösung erreichen Lage:

df2 <- colSums(df[3:15], na.rm = TRUE) 
barplot(df2, las=2, xlab="Street", ylab="Amount of People", main="Pedestrian Traffic For January", cex.lab=0.75, ylim=c(0,1500000)) 

Aber diese Grafik ist sehr einfach und ich kann die X-Achsenbeschriftungen nicht ändern.

Ich möchte auch ein Liniendiagramm machen, das die Gesamtmenge des Verkehrs pro Stunde für eine Straße zeigt, aber ich denke, weil es mehrere Stunden Datenwerte gibt (wie Daten für Stunde 1 von 1/1 dann Stunde 1 von 2/1, etc) zeigt das Liniendiagramm keine Zeile.

Bearbeiten:
Kopf (df): Es gibt mehr Straßen, aber aus Gründen der Formatierung habe ich nur die Daten für die ersten 3 Straßen veröffentlicht.

Date  Hour  Street 1    Street 2   Street 3 
1 01/01/2014 0   1544     893     404 
2 01/01/2014 1   1401     224     179 
3 01/01/2014 2   608     127     97 
4 01/01/2014 3   360     108     74 
5 01/01/2014 4   156     75     33 
6 01/01/2014 5   69     20      8 
+1

Bitte senden Sie 'Kopf (df)' – PoGibas

+0

Editted in Kopf (df) – TLo

Antwort

0

wie ich nicht die eigentlichen Daten haben Sie benutzte ich erzeugt nur einen zufälligen Datensatz.

require(tidyverse) 

# Random Data 
df <- data.frame(date = seq(31), hour = rep(seq(24), 31), Street1 = 
             rpois(24*31, 5), 
             Street2 = rpois(24*31, 10), 
             Street3 = rpois(24*31, 15)) 

# Transform to long format 
df %>% 
    gather(key, value,-date, -hour) -> df 

# Create bar chart 
g <- ggplot(df, aes(x = as.factor(key), y = value)) 
g <- g + geom_bar(stat="identity") 
g <- g + xlab("Street") + ylab("Pedestrian Traffic for January") 
g 

Dieser Code wird ausgegeben folgende Handlung: enter image description here

Sie können ganz einfach die x-Etiketten ändern, indem Sie die Faktor Etiketten der Spalte „Schlüssel“ zu ändern.

kann das Liniendiagramm mit folgendem Code erstellt werden:

# Summarize the hourly data 
df %>% 
    group_by(date,key) %>% 
    summarise(value = sum(value)) -> df 

g <- ggplot(df, aes(x = date, y = value, color = key)) 
g <- g + geom_line() 
g 

Dies wird gibt die folgende Tabelle: enter image description here

+0

Danke für die Hilfe. Ich kann Ihrem Code folgen, habe aber ein Problem, bei dem das Datum für mein df im Zeichenformat statt in Ganzzahl ist, so dass es mich nicht in ein langes Format umwandeln lässt, wie in Ihrem Beispiel. Ich habe versucht, es in Ganzzahl-Format mit as.integer so konvertieren, es wäre das gleiche wie in Ihrem Beispiel, aber es gibt mir NA nach der Konvertierung. Ich denke, das Problem ist das Datum Daten wie "01.01.2014". – TLo

+0

Sie können das lubridate-Paket für einfache Datumstransformationen verwenden. Wenn Sie die Datumsvariable in das korrekte Format umwandeln, sollte es gut funktionieren: erfordern (lubridate) df%>% muate (Datum = ymd (Datum) -> df – Niko

+0

Ich sehe. Vielen Dank noch einmal für die Hilfe. – TLo