Home > Mobile >  R object not found when using scale_x_discrete or scale_x_continuous
R object not found when using scale_x_discrete or scale_x_continuous

Time:05-21

hour_mark   avg_intensity
<int>   <dbl>
0   2.1295503
1   1.4190782
2   1.0439443
3   0.4437299
4   0.6330472
5   4.9506438
6   7.7712137
7   10.7336198
8   14.6680988
9   15.3877551
10  17.6437029
11  16.9212513
12  19.8470716
13  18.7752443
14  18.8686211
15  15.5846995
16  17.7166483
17  21.6556291
18  21.9216336
19  21.3852097
20  14.3399558
21  12.0729282
22  9.0630531
23  4.9966777
ggplot(data=avg_int_hourly,
    aes(x=hour_mark,
        y=avg_intensity,group=1)) 
    geom_line(color="red") 
    geom_point() 
    scale_x_discrete(labels=hour_mark) 
    labs(title='Average Intensity Each Hour of the Day') 
    xlab('Hours of Day') 
    ylab('Average Intensity')

I would like to represent all 24 hours of day in the x-axis so I tried scale_x_discrete and scale_x_continuous using the defined x (hour_mark) but R can't find the object:

Error in check_breaks_labels(breaks, labels): object 'hour_mark' not found
Traceback:

1. scale_x_discrete(labels = hour_mark)
2. discrete_scale(c("x", "xmin", "xmax", "xend"), "position_d", 
 .     identity, ..., expand = expand, guide = guide, position = position, 
 .     super = ScaleDiscretePosition)
3. check_breaks_labels(breaks, labels)

Please help!

CodePudding user response:

Two things:

  • scale_x_discrete needs a discrete value, you've provided a continuous one with a numeric column. We can force this by using factor. (Note that while this works below, if the data is not ordered in a number-like fashion, then our call to factor might need to be explicit with factor(., levels=).)

  • scale_* functions do not do non-standard evaluation the same as the geom_* functions, one needs to pass explicit vectors/objects. Technically we don't need this here, but I'll include what one could do for more control (commented out).

ggplot(data=avg_int_hourly,
    aes(x=factor(hour_mark),
        y=avg_intensity,group=1)) 
    geom_line(color="red") 
    geom_point() 
    ## don't really need this, since the default action for discrete is
    ## to show all of them on the axis
    # scale_x_discrete(breaks=avg_int_hourly$hour_mark, labels=avg_int_hourly$hour_mark) 
    labs(title='Average Intensity Each Hour of the Day') 
    xlab('Hours of Day') 
    ylab('Average Intensity')

enter image description here

  • Related