R ggplot2中曲线下的着色区域

R ggplot2中曲线下的着色区域,r,ggplot2,scatter-plot,R,Ggplot2,Scatter Plot,我将直截了当地谈我的问题。到目前为止,我已经使用这段代码成功地获得了以下绘图: test.dat %>% ggplot(aes(Day, Time2)) + geom_line(aes(Day, Sunrise2, group=1)) + geom_line(aes(Day, Sunset2, group=1)) + geom_point() + facet_grid(Mooring ~ Month) + scale_x_discrete(breaks = c

我将直截了当地谈我的问题。到目前为止,我已经使用这段代码成功地获得了以下绘图:

test.dat %>%
  ggplot(aes(Day, Time2)) + 
  geom_line(aes(Day, Sunrise2, group=1)) +
  geom_line(aes(Day, Sunset2, group=1)) +
  geom_point() + 
  facet_grid(Mooring ~ Month) + 
  scale_x_discrete(breaks = c("05", "10", "15", "20", "25", "30"), 
                   labels=c("5", "10", "15", "20", "25", "30")) +
  scale_y_continuous(labels = c("00:00", "06:00", "12:00", "18:00", "23:59"))

现在,我的下一步是有问题的。我需要实现以下目标:我需要在你能看到的较低曲线下方的区域,以及最高曲线上方的区域进行着色(仅供参考,这些曲线代表日出和日落时间)

我尝试了geom_ribbon和geom_area,但到目前为止没有成功。当然,有些事情我做错了,但我不知道是什么。我花了几个小时在这上面,我有点绝望了。在你提问之前,我已经研究了很多类似的话题,并应用了所说的内容,但对我来说没有任何效果

我希望你能帮忙
下面是生成此图所需的数据示例

提前多谢

structure(list(Dates_Times = structure(c(1436821980, 1437706320, 
1436918940, 1438257840, 1436797020, 1439793660, 1441020000, 1433947260, 
1433944380, 1435737360, 1436997180, 1434830160, 1438705680, 1436845680, 
1433960220, 1434364080, 1436392380, 1438398960, 1436990460, 1439238300, 
1436405040, 1433954940, 1435109820, 1440025500, 1438718160, 1436780880, 
1438822320, 1437325020, 1436871600, 1439760240, 1434100860, 1436397180, 
1434304380, 1438706160, 1439437680, 1437565680, 1436055120, 1433885820, 
1439497500, 1434318000), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Mooring = c("M2", "M1", "M2", "M1", "M2", "M2", "M2", "M2", 
    "M2", "M1", "M2", "M1", "M1", "M1", "M2", "M1", "M2", "M1", 
    "M2", "M2", "M1", "M2", "M2", "M2", "M1", "M1", "M1", "M2", 
    "M1", "M1", "M2", "M2", "M2", "M1", "M1", "M1", "M1", "M2", 
    "M2", "M1"), Month = structure(c(3L, 3L, 3L, 3L, 3L, 4L, 
    4L, 2L, 2L, 3L, 3L, 2L, 4L, 3L, 2L, 2L, 3L, 4L, 3L, 4L, 3L, 
    2L, 2L, 4L, 4L, 3L, 4L, 3L, 3L, 4L, 2L, 3L, 2L, 4L, 4L, 3L, 
    3L, 2L, 4L, 2L), .Label = c("May", "June", "July", "August", 
    "September", "October", "November", "April", "December", 
    "March"), class = "factor"), Day = c("13", "24", "15", "30", 
    "13", "17", "31", "10", "10", "01", "15", "20", "04", "14", 
    "10", "15", "08", "01", "15", "10", "09", "10", "24", "19", 
    "04", "13", "06", "19", "14", "16", "12", "08", "14", "04", 
    "13", "22", "05", "09", "13", "14"), Time2 = c(0.884027777777778, 
    0.119444444444444, 0.00625, 0.502777777777778, 0.595138888888889, 
    0.278472222222222, 0.472222222222222, 0.611805555555556, 
    0.578472222222222, 0.330555555555556, 0.911805555555556, 
    0.830555555555556, 0.686111111111111, 0.158333333333333, 
    0.761805555555556, 0.436111111111111, 0.911805555555556, 
    0.136111111111111, 0.834027777777778, 0.850694444444444, 
    0.0583333333333333, 0.700694444444444, 0.0673611111111111, 
    0.961805555555556, 0.830555555555556, 0.408333333333333, 
    0.0361111111111111, 0.70625, 0.458333333333333, 0.891666666666667, 
    0.389583333333333, 0.967361111111111, 0.745138888888889, 
    0.691666666666667, 0.158333333333333, 0.491666666666667, 
    0.00833333333333333, 0.900694444444444, 0.850694444444444, 
    0.902777777777778), Sunrise2 = c(0.178703703703704, 0.187395833333333, 
    0.180613425925926, 0.194699074074074, 0.178703703703704, 
    0.220636574074074, 0.239085648148148, 0.167592592592593, 
    0.167592592592593, 0.166493055555556, 0.180613425925926, 
    0.162962962962963, 0.201064814814815, 0.176574074074074, 
    0.167592592592593, 0.163101851851852, 0.174409722222222, 
    0.197222222222222, 0.180613425925926, 0.211458333333333, 
    0.172048611111111, 0.167592592592593, 0.16693287037037, 0.223275462962963, 
    0.201064814814815, 0.175613425925926, 0.203668981481481, 
    0.184722222222222, 0.176574074074074, 0.216921296296296, 
    0.166979166666667, 0.174409722222222, 0.166527777777778, 
    0.201064814814815, 0.212916666666667, 0.185081018518519, 
    0.168993055555556, 0.167962962962963, 0.215381944444444, 
    0.163275462962963), Sunset2 = c(0.885914351851852, 0.874895833333333, 
    0.884270833333333, 0.86744212962963, 0.885914351851852, 0.841446759259259, 
    0.817835648148148, 0.889166666666667, 0.889166666666667, 
    0.892546296296296, 0.884270833333333, 0.893229166666667, 
    0.860590277777778, 0.884953703703704, 0.889166666666667, 
    0.891736111111111, 0.889363425925926, 0.864768518518519, 
    0.884270833333333, 0.852395833333333, 0.888680555555556, 
    0.889166666666667, 0.893541666666667, 0.838194444444444, 
    0.860590277777778, 0.885775462962963, 0.857696759259259, 
    0.88056712962963, 0.884953703703704, 0.842222222222222, 0.890289351851852, 
    0.889363425925926, 0.891261574074074, 0.860590277777778, 
    0.847025462962963, 0.877152777777778, 0.890949074074074, 
    0.888553240740741, 0.847789351851852, 0.89130787037037)), .Names = c("Dates_Times", 
"Mooring", "Month", "Day", "Time2", "Sunrise2", "Sunset2"), row.names = c(5044L, 
2151L, 5146L, 2515L, 5037L, 6092L, 6394L, 3895L, 3891L, 976L, 
5226L, 716L, 2591L, 1658L, 3906L, 631L, 4840L, 2549L, 5214L, 
5882L, 1365L, 3901L, 4444L, 6327L, 2607L, 1572L, 2701L, 5384L, 
1707L, 3229L, 4156L, 4848L, 4221L, 2592L, 3045L, 2124L, 1130L, 
3782L, 5911L, 545L), class = "data.frame")

看起来像是
geom_ribbon
可以做到

test.dat %>%
  ggplot(aes(Day, Time2)) + 
  geom_ribbon(aes(Day, ymin=0, ymax=Sunrise2, group=1)) +
  geom_ribbon(aes(Day, ymin=Sunset2, ymax=1, group=1)) +
  #geom_line(aes(Day, Sunrise2, group=1)) +
  #geom_line(aes(Day, Sunset2, group=1)) +
  geom_point() + 
  facet_grid(Mooring ~ Month) + 
  scale_x_discrete(breaks = c("05", "10", "15", "20", "25", "30"), 
                   labels=c("5", "10", "15", "20", "25", "30")) +
  scale_y_continuous(labels = c("00:00", "06:00", "12:00", "18:00", "23:59"))

看起来
geom_ribbon
可以做到这一点

test.dat %>%
  ggplot(aes(Day, Time2)) + 
  geom_ribbon(aes(Day, ymin=0, ymax=Sunrise2, group=1)) +
  geom_ribbon(aes(Day, ymin=Sunset2, ymax=1, group=1)) +
  #geom_line(aes(Day, Sunrise2, group=1)) +
  #geom_line(aes(Day, Sunset2, group=1)) +
  geom_point() + 
  facet_grid(Mooring ~ Month) + 
  scale_x_discrete(breaks = c("05", "10", "15", "20", "25", "30"), 
                   labels=c("5", "10", "15", "20", "25", "30")) +
  scale_y_continuous(labels = c("00:00", "06:00", "12:00", "18:00", "23:59"))

如果使用连续的x轴,事情会变得简单得多,无论是将
Day
作为数字对象还是将
Date
作为类对象。嗨,Gregor,是的,这就是我想要实现的,但是由于facet\u网格,如果使用
facet\u网格(…,scales=“free\u x”),我不知道如何不将日/月分开
它将适合每个图形的比例。您仍然需要一个月列来定义面。如果您使用连续的x轴,无论是将
Day
作为数字对象还是将
Date
作为类对象,事情会变得简单得多。您好,Gregor,是的,这正是我想要实现的,但是由于面网格,如果您使用
facet\u网格,我不知道如何不将日/月分开(…,scales=“free_x”)
它将适合每个图形的比例。您仍然需要一个月的列来定义面。哦,这太棒了,它现在可以工作了!我相信我在尝试时从未使用group=1参数,我从来没有在任何地方看到过它,我应该更仔细地阅读函数的文档,我的糟糕…非常感谢!!哦,这太棒了,它现在可以工作了!我相信我在尝试时从未使用过group=1参数,我从未在任何地方看到过它,我应该更仔细地阅读函数的文档,我的糟糕…非常感谢!!