[R] Datetime misrepresented on x-axis of a multiple plot
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri May 1 19:29:56 CEST 2020
Hello,
If you don't mind a ggplot2 solution, here it is.
As usual with ggplot, it's better to have the data in long format so I
also load packages dplyr and tidyr. The reshaping accounts for half the
code, the code for the graph itself is not very complicated.
library(ggplot2)
library(scales)
library(dplyr)
library(tidyr)
dta %>%
select(datetime, B, BX, BZ) %>%
rename(x = datetime, B1 = B, B2 = BX, B3 = BZ) %>%
pivot_longer(
cols = starts_with("B"),
names_to = "variable",
values_to = "value"
) %>%
ggplot(aes(x, value)) +
geom_line() +
xlab("") + ylab("") +
scale_x_datetime(
breaks = seq(min(x), max(x), by = "days"),
labels = time_format("%a")) +
facet_grid(rows = vars(variable)) +
theme_bw()
Hope this helps,
Rui Barradas
Às 17:46 de 01/05/20, Ogbos Okike escreveu:
> Dear Contributors,
> I am trying to do a plot with multiple y-axis on a common x-axis. I have
> made some progress but I am having difficulties with datetime appearing on
> x-axis. Instead of as date, it appears as large numbers.
>
> Sample of my data:
> 78 09 28 0 6.7 -40.4 -3.5 2.3 -3.6 278036 5.8 612
> 78 09 28 1 5.7 7.3 -4.4 1.4 0.6 261169 4.9 623
> 78 09 28 2 5.6 -20.9 -3.6 3.1 -1.8 269323 4.8 625
> 78 09 28 3 5.8 -46.9 -3.4 0.2 -3.6 254221 4.7 626
> 78 09 28 4 6.2 -41.4 -3.9 1.2 -3.6 248567 4.2 618
> 78 09 28 5 6.1 -54.6 -3 1 -4.4 252669 4.4 629
> 78 09 28 6 NA NA NA NA NA 220480 4.3 606
> 78 09 28 7 7.1 26 -4.8 3.6 2.9 216887 4.4 613
> 78 09 28 8 7.1 -21.4 -4.7 3.5 -2.3 249928 4 643
> 78 09 28 9 7 -13.6 -2.7 5.2 -1.4 268806 4 656
> 78 09 28 10 6.6 -18.5 -3.7 3.6 -1.7 285608 4.2 651
> 78 09 28 11 6.7 -6.6 -2.1 4.7 -0.6 280446 4.2 661
> 78 09 28 12 6.7 -29.7 -1.9 4 -2.5 281928 4.2 659
> 78 09 28 13 6.2 -8.7 -2.1 4.7 -0.8 273465 4.4 651
> 78 09 28 14 6.1 31.8 -4.7 0.9 3 212374 4.2 631
> 78 09 28 15 5.4 9.3 -4.5 -0.9 0.8 219662 3.9 636
> 78 09 28 16 4.9 6.3 -4.5 -0.5 0.5 220610 3.8 628
> 78 09 28 17 4.7 4.5 -4.3 -0.6 0.3 214432 3.7 628
> 78 09 28 18 4.9 3.1 -4.5 0.3 0.2 202199 3.5 623
> 78 09 28 19 5 -13 -4.6 -0.3 -1.1 192859 3.2 619
> 78 09 28 20 5.1 -26 -3.5 2 -2 193868 3.1 627
> 78 09 28 21 10.1 -37.5 -5.1 4.9 -5.4 284122 5.9 683
> 78 09 28 22 8.4 -7.3 -3.6 5.5 -0.8 367499 6.2 694
> 78 09 28 23 8.2 -17.7 -4.7 4.4 -2.1 346644 4.9 689
> 78 09 29 0 8 6.3 -4.3 5.8 0.8 269569 4.7 708
> 78 09 29 1 8.6 35 -3 6.2 4.8 187132 3.2 709
> 78 09 29 2 8.1 24.8 -4.1 6 3.3 166644 3.5 689
> 78 09 29 3 15.9 29.6 -2.4 9.6 5.6 720902 6.6 866
> 78 09 29 4 14.9 18.9 -2.8 13.8 4.8 1587324 8.1 912
> 78 09 29 5 14.1 8.2 -10.2 8.3 1.9 1509336 8.1 871
> 78 09 29 6 15.6 -2.9 -6.1 11.5 -0.7 968890 7.8 878
> 78 09 29 7 19.6 -49.7 1.2 12.1 -14.4 574978 5.4 906
> 78 09 29 8 23.5 -44.2 -1.4 11.7 -11.5 287721 4.1 865
> 78 09 29 9 25.3 -71.8 -2.4 7.5 -23.9 58521 5.1 859
> 78 09 29 10 24.8 -63.1 -2.3 10.9 -22 74956 1.5 821
> 78 09 29 11 23.8 -50 -2 15.1 -18.1 64510 3 807
> 78 09 29 12 21.4 -34.3 0.1 17.6 -12 50247 2.3 795
> 78 09 29 13 18.4 -20 -2 17 -6.3 59939 2.9 802
> 78 09 29 14 16.4 -13.9 -2.8 15.6 -3.9 56499 1.4 799
> 78 09 29 15 15.3 -7.9 -2 14.9 -2.1 49346 1.3 759
> 78 09 29 16 14.1 -0.5 -2.9 13.8 -0.1 57732 0.5 730
> 78 09 29 17 12.6 14.7 -3.1 11.5 3.1 44351 1.7 722
> 78 09 29 18 11.2 74.3 0.6 2.9 10.4 68224 0.4 712
> 78 09 29 19 10.5 60.5 3.2 4 9.1 48082 0.2 706
> 78 09 29 20 10 54.7 3.9 4.2 8.1 56404 0.2 710
> 78 09 29 21 9.3 61.1 3.4 2.9 8.1 68824 0.2 694
> 78 09 29 22 8.6 64.4 2.6 2.7 7.8 44579 0.2 683
> 78 09 29 23 7.9 63.3 2 3 7.1 39760 0.2 661
> 78 09 30 0 7.3 59.8 2.3 2.8 6.3 NA NA NA
> 78 09 30 1 6.6 65.6 1.7 2.1 6 57382 0.5 664
> 78 09 30 2 6 70.8 1.3 1.4 5.5 63540 0.5 654
> 78 09 30 3 4.4 45.1 1 2.7 2.9 60856 2.5 635
> 78 09 30 4 3.6 -28 -1 -0.3 -0.6 80967 1.9 633
> 78 09 30 5 4 -47.6 -2.2 -0.1 -2.4 48391 1.2 642
> 78 09 30 6 4.1 -28.9 -3.1 -1.4 -1.9 45012 1.1 643
> 78 09 30 7 4.2 -42.7 -2.7 1.2 -2.7 45562 1.1 633
> and part of my code is:
> Sys.setenv( TZ="GMT" )
> dta<-read.table("IFEDIFIG1D",col.names=c("year", "month", "day",
> "hour","B","LAT","BX","BZ","BY","SWT","SWD","SW"))
> dta$year <- with( dta, ifelse(year < 50, year + 2000, year + 1900))
> dta$datetime <- with( dta, as.POSIXct(ISOdatetime(year,
> month,day,hour,0,0)))
> x = dta$datetime
> B=dta$B
> LAT=dta$LAT
> BX=dta$BX
> BZ=dta$BZ
> par(mfcol = c(3, 1), mar = numeric(4), oma = c(4, 4, 1, 1),
> mgp = c(2, 0.5, 0))#0.5 here controls x-axis margins
> plot(x, B,type="l", axes = FALSE)
> abline(v=-3)
> axis(2L)
> plot(x, LAT,type="l", axes = FALSE)
> abline(v=-3)
> axis(2L)
> plot(x, BX, type="l",axes = FALSE)
> abline(v=-3)
> axis(1L)
> axis(2L)
> mtext("A1", side = 1, outer = TRUE, line = 2.2)
> mtext("B1", side = 2, outer = TRUE, line = 2.2,at =0.2)
> mtext("B2", side = 2, outer = TRUE, line = 2.2,at =0.5)
> mtext("B2", side = 2, outer = TRUE, line = 2.2,at =0.8)
>
> If I do a simple plot of x and B, the x-axis will be fine, appearing as
> Thu, Fri, Sat, Sun.
> Please let me know what I am doing wrong with the multiple plot code above.
> I want the same Thu, Fri, Sat, Sun to appear on the common x-axis.
>
> I am most grateful for your kind response.
>
> Warmest regards
> Ogbos
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list