Область затенения под кривой в ggplot2 - PullRequest
0 голосов
/ 13 июня 2019

Я пойду прямо в точку с моей проблемой. До сих пор мне удалось получить следующий график, используя этот фрагмент кода:

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

Plot obtained

Теперь мой следующий шаг проблематичен. Мне нужно добиться следующего: мне нужно затенить область ниже нижней кривой, которую вы можете видеть, а также область выше самой высокой кривой (к вашему сведению эти кривые представляют часы восхода и захода солнца со временем).

Я пытался с 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")

1 Ответ

2 голосов
/ 13 июня 2019

Похоже, 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"))

enter image description here

...