Zrozumienie dat i wykreślenie histogramu za pomocą ggplot2 w R

Główne pytanie

Mam problemy ze zrozumieniem, dlaczego obsługa dat, etykiet i przerw nie działa tak, jak oczekiwałbym tego w R podczas próby utworzenia histogramu za pomocą ggplot2.

Szukam:

Histogram częstotliwości moich datZaznacz znaczniki pośrodku pasujących paskówEtykiety daty w%Y-b formatOdpowiednie limity; zminimalizowana pusta przestrzeń między krawędzią przestrzeni siatki a skrajnymi słupkami

Japrzesłałem moje dane do pastebin aby to odtworzyć. Stworzyłem kilka kolumn, ponieważ nie byłem pewien, jak to zrobić:

> dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)
> head(dates)
       YM       Date Year Month
1 2008-Apr 2008-04-01 2008     4
2 2009-Apr 2009-04-01 2009     4
3 2009-Apr 2009-04-01 2009     4
4 2009-Apr 2009-04-01 2009     4
5 2009-Apr 2009-04-01 2009     4
6 2009-Apr 2009-04-01 2009     4

Oto co próbowałem:

library(ggplot2)
library(scales)
dates$converted <- as.Date(dates$Date, format="%Y-%m-%d")

ggplot(dates, aes(x=converted)) + geom_histogram()
+      opts(axis.text.x = theme_text(angle=90))

Który dajeten wykres. Chciałem%Y-%b formatowanie, więc polowałem i próbowałem, na podstawieto więc:

ggplot(dates, aes(x=converted)) + geom_histogram()
+    scale_x_date(labels=date_format("%Y-%b"),
+    breaks = "1 month")
+    opts(axis.text.x = theme_text(angle=90))

stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

To mi dajeten wykres

Prawidłowy format etykiety osi xRozkład częstotliwości zmienił kształt (problem z pojemnością?)Znaki zaznaczenia nie pojawiają się w środku pod kreskamiXlims także się zmienili

Pracowałem za przykładem wdokumentacja ggplot2 nascale_x_date sekcja igeom_line() wydaje się łamać, oznaczać, a środek prawidłowo zaznaczyć, gdy używam go z moimi tymi samymi danymi osi x. Nie rozumiem, dlaczego histogram jest inny.

Aktualizacje oparte na odpowiedziach edytora i gaudena

Początkowo sądziłem, że odpowiedź Gaudena pomogła mi rozwiązać mój problem, ale teraz jestem zaintrygowany po bliższym przyjrzeniu się. Zwróć uwagę na różnice między wykresami wynikającymi z dwóch odpowiedzi po kodzie.

Załóż dla obu:

library(ggplot2)
library(scales)
dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)

Opierając się na odpowiedzi @ edgestera poniżej, byłem w stanie wykonać następujące czynności:

freqs <- aggregate(dates$Date, by=list(dates$Date), FUN=length)
freqs$names <- as.Date(freqs$Group.1, format="%Y-%m-%d")

ggplot(freqs, aes(x=names, y=x)) + geom_bar(stat="identity") +
       scale_x_date(breaks="1 month", labels=date_format("%Y-%b"),
                    limits=c(as.Date("2008-04-30"),as.Date("2012-04-01"))) +
       ylab("Frequency") + xlab("Year and Month") +
       theme_bw() + opts(axis.text.x = theme_text(angle=90))

Oto moja próba oparta na odpowiedzi Gaudena:

dates$Date <- as.Date(dates$Date)
ggplot(dates, aes(x=Date)) + geom_histogram(binwidth=30, colour="white") +
       scale_x_date(labels = date_format("%Y-%b"),
                    breaks = seq(min(dates$Date)-5, max(dates$Date)+5, 30),
                    limits = c(as.Date("2008-05-01"), as.Date("2012-04-01"))) +
       ylab("Frequency") + xlab("Year and Month") +
       theme_bw() + opts(axis.text.x = theme_text(angle=90))

Działka oparta na podejściu edytora:

Fabuła oparta na podejściu Gaudena:

Uwaga:

luki w fabule Gaudena na lata 2009-grudzień i 2010-marzec;table(dates$Date) ujawnia, że ​​istnieje 19 przypadków2009-12-01 i 26 przypadków2010-03-01 w danychfabuła edytora rozpoczyna się w okresie od kwietnia 2008 r. do końca maja 2012 r. Jest to poprawne w oparciu o minimalną wartość w danych z 2008-04-01 i maksymalną datę 2012-05-01. Z jakiegoś powodu spisek gaudena rozpoczyna się w latach 2008-marzec i nadal udaje mu się zakończyć w 2012-maju. Po zliczeniu pojemników i czytaniu na etykietach miesiąca, dla mojego życia nie mogę się zorientować, który wątek ma dodatkowy lub brakuje binogramu!

Jakieś przemyślenia na temat różnic tutaj? metoda tworzenia osobnego licznika

Powiązane odniesienia

Na marginesie, oto inne lokalizacje, które mają informacje o datach i ggplot2 dla przechodniów szukających pomocy:

Zaczęłam tutaj w learnr.wordpress, popularnym blogu R. Stwierdził, że muszę pobrać moje dane do formatu POSIXct, który teraz uważam za fałszywy i zmarnowałem mój czas.Kolejny post odtwarza szereg czasowy w ggplot2, ale nie był odpowiedni do mojej sytuacji.r-blogerzy mają post na ten temat, ale wydaje się przestarzały. Prostyformat= opcja nie działała dla mnie.To pytanie SO bawi się przerwami i etykietami. Próbowałem leczyć mojeDate wektor jako ciągły i nie sądzę, żeby działał tak dobrze. Wyglądało na to, że w kółko pokrywa ten sam tekst etykiety, więc litery wyglądały trochę dziwnie. Dystrybucja jest w pewnym sensie poprawna, ale są dziwne przerwy. Moja próba oparta na zaakceptowanej odpowiedzi była taka (wynik tutaj).

questionAnswers(3)

yourAnswerToTheQuestion