2016-03-22 11 views
1

Meine Daten haben 2 Variablen, einen Zeitstempel und eine Gruppe. Etwas wie folgt aus:Zeichnen Sie einen Punkt pro Beobachtung an einem Tag

df.plot <- structure(list(Timestamp = structure(c(1441814593, 1441818193, 
                1441821398, 1441821449, 1441828375, 1441837436, 1441843661, 1441873127, 
                1441885583, 1441966341, 1441985621, 1442048926, 1442321691, 1442329081, 
                1442349761, 1442408140, 1442417679, 1442508871, 1442513339, 1442514010, 
                1442525088, 1442562304, 1442564744, 1442569290, 1442569482, 1442571416, 
                1442606687), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
          group = c("A", "B", "B", "B", "B", "B", "B", "A", "B", "A", 
            "B", "A", "A", "A", "B", "B", "B", "B", "A", "B", "B", "A", 
            "A", "A", "A", "B", "A")), class = "data.frame", .Names = c("Timestamp", 
                           "group"), row.names = c(NA, -27L)) 

Der Zeitstempel hat Sekunde drin, aber ich möchte nur das Datum verwenden. Das heißt, konvertieren 2015-09-09 16:03:13 bis 2015-09-09.

Für jedes Datum möchte ich einen Punkt zeichnen. Wenn ich am selben Tag Beobachtungen machen muss, würde ich gerne einen Punkt übereinander zeichnen. Zusätzlich möchte ich Facetten für die Variable group verwenden.

konnte ich etwas Ähnliches tun, was ich will:

ggplot(df.plot, aes(x=Timestamp)) + 
    geom_dotplot(method="histodot") + 
    facet_grid(group ~ .) 

Wie kann ich ggplot nur verwenden das Datum sagen, und wie kann ich die Skalierung der y-Achse ändern, um die Zählung angezeigt werden?

+0

Vielleicht mit Konvertieren in 'Date' Klasse ...' as.Date() '. – Gregor

+0

Was @Gregor sagte ... 'x = as.Date (Timestamp)'. Ich habe ursprünglich 'format' vorgeschlagen, aber das wird wahrscheinlich langsamer sein. – MichaelChirico

Antwort

2
ggplot(df.plot, aes(x=as.Date(Timestamp))) + 
    geom_dotplot(binwidth=1) + 
    coord_fixed(ratio=1) + 
    ylim(0,7) + 
    facet_grid(group ~ .) 

enter image description here

+0

Ich sehe, du brauchst meine doch nicht :) - das ist viel besser – SymbolixAU

3

erstellen date Spalte aus Timestamp und Grundstück wie üblich

df.plot$date <- as.Date(df.plot$Timestamp, format="%Y-%m-%d %H:%M:%s") 

ggplot(data=df.plot, aes(x=date)) + 
    geom_dotplot(method="histodot") + ylim(0,7) + 
    facet_wrap(~group) 

Natürlich können Sie nicht wirklich eine neue Variable erstellen haben, können Sie sie alle wihtin die ggplot tun können rufen

ggplot(data=df.plot, aes(x=as.Date(Timestamp))) + 
    geom_dotplot(method="histodot") + ylim(0,7) + 
    facet_wrap(~group) 

Sie zählt zu erhalten, können Sie ändern Sie die Daten, die ein 'count' Variable enthalten (mit welcher Methode Sie bevorzugen, dplyr, data.table, etc ..)

hier bin ich data.table

library(data.table) 
setDT(df.plot) 

df.plot[, date := as.Date(Timestamp)] 
df.plot[, nCount := seq(1:.N), by=.(date, group)] 

ggplot(data=df.plot, aes(x=date, y=nCount)) + 
    geom_point() + 
    facet_wrap(~group) 
+0

@MichaelChirico besser? ;-) – SymbolixAU

+0

@MichaelChirico - yep - Ich habe an der Antwort gearbeitet, während diese Kommentare geschrieben wurden :) – SymbolixAU

+0

@Ignacio - wie ich es aus deinem Kommentar zu deiner Frage verstehe, hat das deine zweite Anforderung nicht gelöst? – SymbolixAU

Verwandte Themen