2013-02-03 10 views
5

Kiedy I boxplot niektóre dane mierzone w sekundach w R, jak mogę zmienić skalę osi Y od sekund do minut i sekund?R: Boxplot z minutami i sekundami na osi Y

Na przykład, gdy robię coś takiego:

data <- c(298, 507, 1008, 346) 
boxplot(data) 

dostaję boxplot z osią y od 300 do 1000. Chciałbym mieć „5:00” na „16:40” nie zamiast tego, po prostu sekundy są konwertowane na minuty i sekundy.

Odpowiedz

8

Oto próba. Wyłącza oś y, a następnie konwertuje dane na minuty i dodaje je do osi y jako znaczniki.

data <- c(298, 507, 1008, 346) 
boxplot(data, yaxt="n") 
at <- axTicks(2) 
axis(2, at=at, labels=sprintf("%d:%02d", at %/% 60, at %% 60), las=1) 

Aby zapewnić trochę wyjaśnienie:

"oblicza ładne lokalizacje tickmark, tak samo jak R robi wewnętrznie." (Z ?axTicks).

%% daje pozostałą po podziale, a %/% wola, jeśli dana x %/% y powiedzieć ile razy x idzie do y.

Wreszcie sprintf stosuje formatujących i wkładka będzie obliczona wartość sekund do-zawsze prowadzi 0 JEŻELI wymagane, to znaczy - 2 się 02.

enter image description here

+0

To _exactly_ co było mi potrzebne. Wielkie dzięki :-) –

3

Alternatywnym z funkcją axis.POSIXct:

data <- c(298, 507, 1008, 346) 
data2 <- as.POSIXct(data, origin=cut(Sys.time(), "hours")) 
boxplot(data2, pars=list(yaxt="n")) 
axis.POSIXct(2, at=pretty(data2), format="%M:%S", las=2) 

enter image description here

Powiązane problemy