0

I have a set of data that looks like this:

str(presence$Time)
Factor w/ 413 levels "00:00:00","00:10:00",..: 273 50 259 259 260 122 243 244 244 249 ...

this is an example from my data set

 presence<-  
    Month    Date Year Time     Number         
42  November    2 2019 16:54:00   1                
102 November    5 2019 03:57:00   1           
116 November    5 2019 16:31:00   1             
117 November    5 2019 16:31:00   2               
118 November    5 2019 16:32:00   1                
134 November    6 2019 07:20:00   2                 
144 November    6 2019 16:12:00   1               
169 November    7 2019 16:13:00   1          
170 November    7 2019 16:13:00   1             
171 November    7 2019 16:18:00   1                
172 November    7 2019 16:21:00   3               
173 November    7 2019 16:37:00   1               
181 November    7 2019 23:19:00   4               
189 November    8 2019 06:14:00   2              
191 November    8 2019 07:27:00   2                
201 November    8 2019 16:30:00   1                 
204 November    8 2019 18:55:00   1                 
206 November    8 2019 19:37:00   1                
218 November    9 2019 06:17:00   1                
235 November    9 2019 22:10:00   4            
245 November   10 2019 07:07:00   2             
255 November   10 2019 16:13:00   2             
256 November   10 2019 16:18:00   2             
257 November   10 2019 16:29:00   1            
258 November   10 2019 16:29:00   3              
264 November   10 2019 21:35:00   4           
667 November   27 2019 15:43:00   1              
668 November   27 2019 15:54:00   1            
693 November   28 2019 15:38:00   2           
694 November   28 2019 15:45:00   6              
695 November   28 2019 15:51:00   1          
696 November   28 2019 15:52:00   3         
697 November   28 2019 15:54:00   1       
698 November   28 2019 15:57:00   2          
701 November   28 2019 17:50:00   2          
714 November   29 2019 05:06:00   2         
718 November   29 2019 08:07:00   3         
726 November   29 2019 15:58:00   1         
727 November   29 2019 15:59:00   1        
752 November   30 2019 15:34:00   1      
753 November   30 2019 15:42:00   4     
754 November   30 2019 15:45:00   4         
779 December    1 2019 15:43:00   1       
781 December    1 2019 16:17:00   1      
783 December    1 2019 17:11:00   2          
798 December    2 2019 07:56:00   1      
800 December    2 2019 08:10:00   3          
801 December    2 2019 08:12:00   1         
809 December    2 2019 15:38:00   1          
810 December    2 2019 15:43:00   3         
827 December    3 2019 07:57:00   2       
839 December    3 2019 18:37:00   2      
861 December    4 2019 15:28:00   1       
862 December    4 2019 15:31:00.  1 
863 December    4 2019 15:32:00   1      
864 December    4 2019 15:37:00   2        
865 December    4 2019 15:39:00   2    
866 December    4 2019 15:43:00   3       
867 December    4 2019 15:47:00   2        
868 December    4 2019 15:53:00   1         
870 December    4 2019 16:06:00   1          
871 December    4 2019 16:09:00   1        
872 December    4 2019 16:15:00   2       
873 December    4 2019 16:55:00   4         
875 December    4 2019 17:47:00   2       
880 December    4 2019 21:17:00   1     
882 December    4 2019 22:33:00   1         
891 December    5 2019 06:57:00   1       
893 December    5 2019 07:06:00   1         
905 December    5 2019 18:52:00   1  
910 December    5 2019 22:38:00   1    
928 December    6 2019 15:32:00   1         
929 December    6 2019 15:38:00   1         
930 December    6 2019 15:44:00   2        
931 December    6 2019 15:48:00   1         
932 December    6 2019 15:52:00   1     
933 December    6 2019 15:53:00   1       
935 December    6 2019 16:06:00   4      
936 December    6 2019 16:08:00   1     
937 December    6 2019 16:10:00   1         
938 December    6 2019 16:12:00   1       
939 December    6 2019 16:13:00   1         
940 December    6 2019 16:17:00   1      
941 December    6 2019 16:38:00   1         
944 December    6 2019 18:21:00   2     
945 December    6 2019 18:23:00   1         
947 December    6 2019 19:32:00   1        
952 December    6 2019 23:18:00   2          
961 December    7 2019 07:39:00   1        
987 December    8 2019 08:10:00   2         

What i'm trying to do is show the number on the y-axis and then the time (24 hours) on the x-axis.

I looked around and found a type of code that I thought i could manipulate to use. The code is as follows:

ggplot(presence, aes(x=Time, y=Number, colour=Month)) + 
geom_path() + 
geom_point() + 
scale_x_datetime(breaks=date_breaks("5 hour")) + 
facet_grid(Month ~.) +
theme(legend.position="none")

However i then got an error that said

Error: Invalid input: time_trans works with objects of class POSIXct only

I then went on to investigate what this "posixct" meant and it said you have to change it into that when working with time and date data. So thats what i did, and went back to include that function in my code. However, that function changed my time series data to have todays date "26th July 2020" on it.

I am working with 5 different months here "Nov, Dec, Jan, Feb, March" so I just simply want 24 hours on the x-axis and not the date.

My attempt using the above code gave me this graph:

Messy plot produced

as you can see, on the axis it is plotting todays date. I am really confused on what I am doing wrong as I thought i followed the right steps based off of example codes of similar questions I found online.

I dont need the date at all really apart from the names of those 5 months set out in different boxes like the graph i produced. I just need to see how many times something was present during the different 24 hour time periods.

tjebo
  • 21,977
  • 7
  • 58
  • 94
nickie_5
  • 1
  • 2
  • Hi nickie_5, welcome to StackOverflow! Could you share (a part of) your data to help us help you? Use for example `dput()`. See https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example for information on how to do that. – Bas Jul 26 '20 at 16:35
  • Hi Bas, I will edit the question just now to try and include that! – nickie_5 Jul 26 '20 at 16:37
  • It might just work if you add `date_labels = "%T"` to your `scale_x_datetime()` call. The 'problem' is that there is no such thing as a 'time' object; only datetime. Since you don't care about the date, but `R` needs it, you can just ignore it in the plot by specifying that you only want to see the time (`%T`) on the x-axis. – Bas Jul 26 '20 at 16:50
  • Hi bas. I included the example dataframe above. But i will go about trying out that solution just now and see if i have any luck – nickie_5 Jul 26 '20 at 17:03

1 Answers1

0

If I understand correctly, you want to aggregate by month and hours?

E.g., the count of observations per hour:

library(tidyverse)
library(lubridate)

  presence %>%
    mutate(hours = hour( hms(Time))) %>%
    count(Year, Month, hours) %>%
  ggplot(aes(x=hours, y=n, colour = Month)) + 
    geom_line() + 
    geom_point() +
    scale_x_continuous(breaks = seq(0, 24, 2))+
    facet_grid(~ Month) 

data

presence<-  read.table(text = "Month    Date Year Time     Number         
42  November    2 2019 16:54:00   1                
102 November    5 2019 03:57:00   1           
116 November    5 2019 16:31:00   1             
117 November    5 2019 16:31:00   2               
118 November    5 2019 16:32:00   1                
134 November    6 2019 07:20:00   2                 
144 November    6 2019 16:12:00   1               
169 November    7 2019 16:13:00   1          
170 November    7 2019 16:13:00   1             
171 November    7 2019 16:18:00   1                
172 November    7 2019 16:21:00   3               
173 November    7 2019 16:37:00   1               
181 November    7 2019 23:19:00   4               
189 November    8 2019 06:14:00   2              
191 November    8 2019 07:27:00   2                
201 November    8 2019 16:30:00   1                 
204 November    8 2019 18:55:00   1                 
206 November    8 2019 19:37:00   1                
218 November    9 2019 06:17:00   1                
235 November    9 2019 22:10:00   4            
245 November   10 2019 07:07:00   2             
255 November   10 2019 16:13:00   2             
256 November   10 2019 16:18:00   2             
257 November   10 2019 16:29:00   1            
258 November   10 2019 16:29:00   3              
264 November   10 2019 21:35:00   4           
667 November   27 2019 15:43:00   1              
668 November   27 2019 15:54:00   1            
693 November   28 2019 15:38:00   2           
694 November   28 2019 15:45:00   6              
695 November   28 2019 15:51:00   1          
696 November   28 2019 15:52:00   3         
697 November   28 2019 15:54:00   1       
698 November   28 2019 15:57:00   2          
701 November   28 2019 17:50:00   2          
714 November   29 2019 05:06:00   2         
718 November   29 2019 08:07:00   3         
726 November   29 2019 15:58:00   1         
727 November   29 2019 15:59:00   1        
752 November   30 2019 15:34:00   1      
753 November   30 2019 15:42:00   4     
754 November   30 2019 15:45:00   4         
779 December    1 2019 15:43:00   1       
781 December    1 2019 16:17:00   1      
783 December    1 2019 17:11:00   2          
798 December    2 2019 07:56:00   1      
800 December    2 2019 08:10:00   3          
801 December    2 2019 08:12:00   1         
809 December    2 2019 15:38:00   1          
810 December    2 2019 15:43:00   3         
827 December    3 2019 07:57:00   2       
839 December    3 2019 18:37:00   2      
861 December    4 2019 15:28:00   1       
862 December    4 2019 15:31:00.  1 
863 December    4 2019 15:32:00   1      
864 December    4 2019 15:37:00   2        
865 December    4 2019 15:39:00   2    
866 December    4 2019 15:43:00   3       
867 December    4 2019 15:47:00   2        
868 December    4 2019 15:53:00   1         
870 December    4 2019 16:06:00   1          
871 December    4 2019 16:09:00   1        
872 December    4 2019 16:15:00   2       
873 December    4 2019 16:55:00   4         
875 December    4 2019 17:47:00   2       
880 December    4 2019 21:17:00   1     
882 December    4 2019 22:33:00   1         
891 December    5 2019 06:57:00   1       
893 December    5 2019 07:06:00   1         
905 December    5 2019 18:52:00   1  
910 December    5 2019 22:38:00   1    
928 December    6 2019 15:32:00   1         
929 December    6 2019 15:38:00   1         
930 December    6 2019 15:44:00   2        
931 December    6 2019 15:48:00   1         
932 December    6 2019 15:52:00   1     
933 December    6 2019 15:53:00   1       
935 December    6 2019 16:06:00   4      
936 December    6 2019 16:08:00   1     
937 December    6 2019 16:10:00   1         
938 December    6 2019 16:12:00   1       
939 December    6 2019 16:13:00   1         
940 December    6 2019 16:17:00   1      
941 December    6 2019 16:38:00   1         
944 December    6 2019 18:21:00   2     
945 December    6 2019 18:23:00   1         
947 December    6 2019 19:32:00   1        
952 December    6 2019 23:18:00   2          
961 December    7 2019 07:39:00   1        
987 December    8 2019 08:10:00   2")
tjebo
  • 21,977
  • 7
  • 58
  • 94
  • Hi Tjeb. I tried that code you sent and its gotten me a little further (so thank you) however, it is still not showing the time correctly on the x-asix. It keeps telling me an error when i try and change the a-xis breaks to periods of 2 hours. It keeps saying "Error: Invalid input: time_trans works with objects of class POSIXct only". How would i fix this? – nickie_5 Jul 26 '20 at 17:24
  • @nickie_5 sorry saw your message only now. One way is to set the breaks in scale_x_continuous.- **see update** . Because we have aggregated by 'hours' with the `lubridate::hour` function, "hours" is not a time, but numeric variable. So you won't be able to set the breaks with a date scaling function – tjebo Jul 27 '20 at 09:45