Skip to content

Datetime misrepresented on x-axis of a multiple plot

7 messages · Rui Barradas, Rolf Turner, Jim Lemon +1 more

#
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
#
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:
#
Hello,

I have just noticed that the facets' labels are on the right, in your 
code example they are on the left. Change the following:


facet_grid(rows = vars(variable), switch = "y")


Hope this helps,

Rui Barradas

?s 18:29 de 01/05/20, Rui Barradas escreveu:
#
On 2/05/20 4:46 am, Ogbos Okike wrote:

            
<SNIP>

I would strongly advise you *not* to.  This, although often done, is a 
bad practice, and can sometimes (often) give misleading impressions.  See

     https://blog.datawrapper.de/dualaxis/

cheers,

Rolf
#
Hi Ogbos,
The following code may get you close to what you want. I have used the
names of the columns in "dta" as it is less confusing for me. I think
you meant to request horizontal ablines as none appeared in the
example. In order to get the axis tick label "Sun" you would have to
increase the x axis limits beyond your data.

plot(dta$datetime,dta$B,type="l",axes=FALSE)
# this is out of range and doesn't appear
abline(h=-3,col="red")
axis(2)
plot(dta$datetime,dta$LAT,type="l",axes=FALSE)
abline(h=-3,col="red")
axis(2)
plot(dta$datetime,dta$BX,type="l",axes=FALSE)
abline(h=-3,col="red")
axis(2)
axis.POSIXct(1,dta$datetime,format="%a")
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)

Jim
On Sat, May 2, 2020 at 2:47 AM Ogbos Okike <giftedlife2014 at gmail.com> wrote:
#
Dear Rui Barradas,
Many thanks for your time.

Though I have not used ggplot before, I quickly installed all the required
packages and attempted your code. It produced the plot and solved the
initial problem of the wrong labels on x-axis.
But I noticed several other problems with the plot (some of which I have
circumvented by adjusting the script I displayed earlier). As I am not
quite familiar with ggplot, it was very difficult for me to interact with
your code. I decided to go back to my own code. I tried to use axis(1 ...,
labels=c()...) to assign Thu, Fri .... It worked for me before I got a
third response (very helpful) from the list.
Best regards
Ogbos
On Fri, May 1, 2020 at 6:35 PM Rui Barradas <ruipbarradas at sapo.pt> wrote:

            

  
  
#
Dear Jim and Rolf Turner,
This is great!!!!!!!!!!!!!!!!
The labels on x-axis are now correctly displayed. Jim, your singular code:
axis.POSIXct(1,dta$datetime,format="%a")
made all the required adjustment, making life quite easy for me.

The abline commands are indeed meant to draw a common vertical line across
the different panels. I have quickly achieved that with:
abline(v=as.POSIXct("1978-09-29 00:00:00"))

I have successfully added the rest of the data, displaying seven/more
variables on a single plot and using some common vertical lines to indicate
the variations in several solar wind plasma data/cosmic rays at Earth at
the time of coronal mass ejections from the sun. It makes an interesting
plot to those in our field.

Confusion or "misleading impressions" do not arise at all as the data used
as well as date plotted are usually online for easy verification by
experts/anyone.

Many thanks for all your contributions.

Warmest regards
Ogbos
On Fri, May 1, 2020 at 11:47 PM Jim Lemon <drjimlemon at gmail.com> wrote: