使用 scale_x_discrete 或 scale_x_continuous 时找不到 R 对象

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')

我想在 x 轴上表示一天中的所有 24 小时,所以我尝试使用定义的 x (hour_mark) scale_x_discrete 和 scale_x_continuous,但 R 不能找到对象:

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)

请帮忙!

两件事:

  • scale_x_discrete 需要一个离散值,您已经提供了一个带有数字列的连续值。我们可以使用 factor 强制执行此操作。 (请注意,虽然这在下面有效,但如果数据没有以 number-like 方式排序,那么我们对 factor 的调用可能需要使用 factor(., levels=) 来显式调用。)

  • scale_*函数不做non-standard求值,和geom_*函数一样,需要显式传递vectors/objects。从技术上讲,我们在这里不需要这个,但我会包括可以做些什么来获得更多控制(注释掉)。

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')