Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

R object not found when using scale_x_discrete or scale_x_continuous

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!

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

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

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading