2017-09-18 3 views
0

Ich habe einen Datensatz von 600 Befragten. Ich habe für jeden der 600 Befragten in 5 Jahren - 2013, 2014, 2015, 2016, 2017 - einige Indikatorwerte. Außerdem habe ich für jeden Befragten eine Stadtsäule. Ich möchte ein Diagramm erstellen, in dem ich den Indikator für jeden der 600 Befragten mit einem Liniendiagramm zeichne - ein Liniendiagramm für jeden Befragten, so dass die Y-Achse einen Indikatorwert hat und die X-Achse Jahre hat. Ich habe die Farben von Liniendiagrammen nach Städten getrennt. Außerdem möchte ich eine separate Median-Indikatorlinie hinzufügen, so dass es für die Befragten für jede Stadt eine Median-Linie gibt. Ich konnte eine konsolidierte Medianlinie erstellen, erhalte jedoch einen Fehler, wenn ich mehrere Mediane plotten möchte. Hier ist der Code ich verwende -Plotten mehrerer Mediane in einem einzigen Diagramm von Panel-Daten

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(magrittr) 

sample_no <- c(1:600) 
city <- c(rep("A",150), rep("B",250), rep("C", 200)) 
indicator_2013 <- runif(600, min=0, max=1000) 
indicator_2014 <- runif(600, min=0, max=1000) 
indicator_2015 <- runif(600, min=0, max=1000) 
indicator_2016 <- runif(600, min=0, max=1000) 
indicator_2017 <- runif(600, min=0, max=1000) 

df <- data.frame(sample_no, city, indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017) 
df1 <- df %>% 
    gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, key="Year", value = "Indicator") 

df1 %>% 
    ggplot(aes(x=Year, y=Indicator, color=as.factor(city))) + 
    geom_line(aes(group = sample_no), alpha = .5, size = 0.7) + 
    labs(col = "City") + 
    stat_summary(aes(y = Indicator, group =1), fun.y=median, geom = "line", color = "black", size = 1) 

Hinweis: Dies ist nur Dummy-Daten so Graphen symmetrisch ist ... Ich habe versucht, mit dem folgenden Code für mehrere Mittellinien machen aber ich habe den Fehler - Fehler: Ästhetik

, Größe
stat_summary(aes(y = Indicator, group =1), fun.y=median, colour=city, geom="line", size =1) 

ich sah mich um für die Dokumentation und andere R Blog-Beiträge Farbe, aber etwas nützliches fand nicht: entweder Länge 1 oder die gleiche wie die Daten (5) sein.

Antwort

1

, wenn ich Sie richtig verstanden Sie müssen nur group Argument in die Stadt ändern und nicht 1:

stat_summary(aes(y = Indicator, group =city)... 

Voll Code:

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(magrittr) 
sample_no <- c(1:600) 
city <- c(rep("A",150), rep("B",250), rep("C", 200)) 
indicator_2013 <- runif(600, min=0, max=1000) 
indicator_2014 <- runif(600, min=0, max=1000) 
indicator_2015 <- runif(600, min=0, max=1000) 
indicator_2016 <- runif(600, min=0, max=1000) 
indicator_2017 <- runif(600, min=0, max=1000) 
df <- data.frame(sample_no, city, indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017) 
df1 <- df %>% 
    gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, key="Year", value = "Indicator") 
df1 %>% 
    ggplot(aes(x=Year, y=Indicator, color=as.factor(city))) + 
    geom_line(aes(group = sample_no), alpha = .5, size = 0.7) + 
    labs(col = "City") + 
    stat_summary(aes(y = Indicator, group =city), fun.y=median, geom = "line", color = "black", size = 1) 

Zusätzlich wird die Farbe Argument kann nicht außerhalb von Die aes() Wenn Sie Variablennamen wie Spalte: Stadt verwenden, hier ist der korrekte Weg, wenn Sie die Linien von der Stadt gefärbt haben möchten:

stat_summary(aes(y = Indicator, group =city, color = city), fun.y=median, geom="line", size =1) 

[ANTWORT AUF ANFRAGE IM KOMMENTAR]

Hier ist der vollständige Code:

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(magrittr) 
sample_no <- c(1:600) 
city <- c(rep("A",150), rep("B",250), rep("C", 200)) 
indicator_2013 <- runif(600, min=0, max=1000) 
indicator_2014 <- runif(600, min=0, max=1000) 
indicator_2015 <- runif(600, min=0, max=1000) 
indicator_2016 <- runif(600, min=0, max=1000) 
indicator_2017 <- runif(600, min=0, max=1000) 
df <- data.frame(sample_no, city, indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017) 
df1 <- df %>% 
    gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, key="Year", value = "Indicator") 
df1 %>% 
    ggplot(aes(x=Year, y=Indicator, color=as.factor(city))) + 
    geom_line(aes(group = sample_no), alpha = .5, size = 0.7) + 
    labs(col = "City") + 
    stat_summary(aes(y = Indicator, group =city), fun.y=median, geom = "line", color = "black", size = 1) + scale_x_discrete(expand=c(0,0)) 

Sie müssen nur scale_x_discrete(expand=c(0,0)) hinzufügen, um die Räume zu entfernen und x-Achse aus dem ersten Faktor starten Niveau.

+0

Danke das funktioniert perfekt! Ich hatte zwei Follow-up-Fragen - 1. Welche unterschiedlichen Werte nimmt die Gruppe in stat_summary ein? Wann wird 1 verwendet? Ich schaute nach oben, aber das sagt nicht viel. 2. In der Grafik, die mit diesem Code erzeugt wird, wird viel Platz zwischen der Koordinate (0,0) und der ersten x-asix-Tickbeschriftung vergeudet, ebenso zwischen der letzten x-asis-Marke und dem Ende des Graphen. Wie kann dies reduziert werden? Vielleicht sollte dies ein weiterer Beitrag sein, aber ich habe eine Menge von ggplot-Dokumentation gesucht, aber nichts gefunden. – user3816784

+1

group = 1 zeigt an, dass Sie eine einzige Linie wünschen, die alle Punkte verbindet –

+0

Ich habe Ihre zweite Frage in der Hauptantwort oben beantwortet –

Verwandte Themen