2013-05-21 16 views
5

Chcę wykreślić kilka histogramów danych czasowych (1 tydzień) na tym samym wykresie co linie.Histogramy wydruku jako linie

Mam dane czasu:

> dput(head(ts)) 
structure(c(1364421605.227, 1364375025.034, 1364376298.393, 1364375002.928, 
1364393158.084, 1364423268.856), class = c("POSIXct", "POSIXt")) 

i chcę wykreślić jego histogram. hist(ts,breaks=7*24) działa dobrze, ale korzysta z typu plotowania h, który zasłoni inne wykresy histogramu, które chcę dodać (wiem, że mogę używać przezroczystych kolorów - rainbow z alpha=0.5, ale naprawdę chcę zobaczyć linie).

Próbowałem

> hist(ts, breaks = 7*24, type="l") 
Warning messages: 
1: In title(main = main, sub = sub, xlab = xlab, ylab = ylab, ...) : 
    graphical parameter "type" is obsolete 
Calls: hist -> hist.POSIXt -> myplot -> plot -> plot.histogram -> title 
2: In axis(2, ...) : graphical parameter "type" is obsolete 
Calls: hist -> hist.POSIXt -> myplot -> axis 
3: In axis(side, at = z, labels = labels, ...) : 
    graphical parameter "type" is obsolete 
Calls: hist -> hist.POSIXt -> myplot -> axis.POSIXct -> axis 

dlaczego hist przechodząc type do title?

można utworzyć obiektu histogramu i wykreślić oddzielnie:

> h <- hist(ts, breaks=7*24, plot=FALSE) 
> plot(x=h$mids, y=h$density, type="l") 

ale oś x jest oznaczony numerami (E.D. „1364421605”) nie daty (na przykład „25 marca”).

Domyślam się, że mam użyć axis, ale wolałbym tego nie robić - ostatecznie, hist konstruuje tylko oś, której chcę!

Dzięki!

+0

Cóż, wydaje się, że 'hist' dosłownie nie jest zbudowany, aby to zrobić. Jeśli spojrzysz na kod dla metod wykresu, to dosłownie ma on prostokąty zakodowane na stałe za pomocą wezwania do 'rect'. W metodach POSIX-a ma on rozbudowany kod do konstruowania osi, które lubisz. Prawdopodobnie będziesz musiał skopiować tę konstrukcję osi (lub może istnieć funkcja drukowania w pakiecie, która już to robi, kto wie). – joran

+0

Ponadto, można zobaczyć przekaz nieużywanych argumentów do 'title' na stronie pomocy dla' hist', szczególnie w sekcji '...'. – Justin

+0

Jeśli użyjesz 'ggplot' zamiast tego możesz umieścić różne histogramy obok siebie (używając różnych kolorów, jeśli chcesz), co spowoduje, że cały problem będzie dyskusyjny. Zobacz np. http://docs.ggplot2.org/0.9.3/geom_histogram.html – eddi

Odpowiedz

5

Poniższe wygląda dziwnie, ponieważ dałeś nam tylko sześć punktów danych w twoim dput. można wykreślić wykres liniowy bez osi x i dodać go później tak:

h <- hist(ts, breaks=7*24, plot=FALSE) 
plot(x=h$mids, y=h$density, type="l", xaxt="n") 
axis(1,at=ts,labels=format(ts,"%b-%d")) 

enter image description here

+1

Genialny! z wyjątkiem tego, że 'oś' powinno być nazywane' axis (1, at = h $ breaks, labels = format (jak .OSIXct (h $ breaks, origin = "1970-01-01"), "% b% d")) ' – sds

+0

Można również sprawić, aby wyglądał mniej" dziwnie ", wybierając mniej pojemników. – Denise