Search code examples
rggplot2lubridatedensity-plot

Density plot based on time of the day


I've the following dataset:

https://app.box.com/s/au58xaw60r1hyeek5cua6q20byumgvmj

I want to create a density plot based on the time of the day. Here is what I've done so far:

library("ggplot2")
library("scales")
library("lubridate")

timestamp_df$timestamp_time <- format(ymd_hms(hn_tweets$timestamp), "%H:%M:%S")

ggplot(timestamp_df, aes(timestamp_time)) + 
       geom_density(aes(fill = ..count..)) +
       scale_x_datetime(breaks = date_breaks("2 hours"),labels=date_format("%H:%M"))

It gives the following error: Error: Invalid input: time_trans works with objects of class POSIXct only

If I convert that to POSIXct, it adds dates to the data.

Update 1

The following converted data to 'NA'

timestamp_df$timestamp_time <- as.POSIXct(timestamp_df$timestamp_time, format = "%H:%M%:%S", tz = "UTC"

Update 2

Following is what I want to achieve: enter image description here


Solution

  • Here is one approach:

    library(ggplot2)
    library(lubridate)
    library(scales)
    
    df <- read.csv("data.csv") #given in OP
    

    convert character to POSIXct

    df$timestamp <- as.POSIXct(strptime(df$timestamp, "%m/%d/%Y %H:%M",  tz = "UTC"))
    
    library(hms)
    

    extract hour and minute:

    df$time <- hms::hms(second(df$timestamp), minute(df$timestamp), hour(df$timestamp))  
    

    convert to POSIXct again since ggplot does not work with class hms.

    df$time <- as.POSIXct(df$time)
    
    
    ggplot(df, aes(time)) + 
      geom_density(fill = "red", alpha = 0.5) + #also play with adjust such as adjust = 0.5
      scale_x_datetime(breaks = date_breaks("2 hours"), labels=date_format("%H:%M"))
    

    enter image description here

    to plot it scaled to 1:

    ggplot(df) + 
      geom_density( aes(x = time, y = ..scaled..), fill = "red", alpha = 0.5) +
      scale_x_datetime(breaks = date_breaks("2 hours"), labels=date_format("%H:%M"))
    

    where ..scaled.. is a computed variable for stat_density made during plot creation.

    enter image description here