2017-02-01 3 views
2

Я делаю график в ggplot и хотел бы, чтобы у моего ключа не было цвета фона. Я могу удалить цвет фона с помощью следующего кода из последней строки, legend.key = element_blank():Удалить легенду фона при использовании geom_rect

#For Testing 
ggplot(data= Data, aes(x = Date, y = Elev, group = Well, colour = Well)) + 
geom_line(size = 0.75) + 
    xlab("") + ylab("Elevation (ft.)") + 
    scale_color_brewer(palette = "Spectral") + 
    scale_x_date(breaks = date_breaks("1 year"), 
       date_labels = ("%b %Y")) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), 
     panel.grid.major.x = element_blank(), 
     panel.grid.major.y = element_line(size=.1, color="gray"), 
     panel.grid.minor = element_blank(), 
     axis.line.x = element_line(color = "black"), 
     axis.line.y = element_line(color = "black"), 
     panel.background = element_rect(fill = "white"), 
     legend.key=element_blank()) 

Однако, я также хотел бы оттенить некоторые части моего графика с использованием geom_rect. Проблема в том, что когда я добавляю оттенок лаванды в некоторых областях моего графика, фон легенды становится лавандой. На самом деле, кажется, что для каждого лавандового поля я делаю с geom_rect, фон легенды становится более темным оттенком лаванды ... Следующий код является кодом выше плюс мой geom_rect команды:

ggplot(data= Data, aes(x = Date, y = Elev, group = Well, colour = Well)) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2003-08-11", "%Y-%m-%d"), 
       xmax = as.Date("2003-08-14", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2004-04-29", "%Y-%m-%d"), 
       xmax = as.Date("2004-12-20", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2005-04-07", "%Y-%m-%d"), 
       xmax = as.Date("2005-12-12", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2006-04-21", "%Y-%m-%d"), 
       xmax = as.Date("2006-12-08", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2007-03-27", "%Y-%m-%d"), 
       xmax = as.Date("2007-12-03", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2008-04-09", "%Y-%m-%d"), 
       xmax = as.Date("2008-11-28", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2009-05-11", "%Y-%m-%d"), 
       xmax = as.Date("2009-11-26", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2010-04-10", "%Y-%m-%d"), 
       xmax = as.Date("2010-10-10", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2011-04-19", "%Y-%m-%d"), 
       xmax = as.Date("2011-11-18", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2012-04-12", "%Y-%m-%d"), 
       xmax = as.Date("2012-11-14", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2013-05-09", "%Y-%m-%d"), 
       xmax = as.Date("2013-11-12", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2014-05-23", "%Y-%m-%d"), 
       xmax = as.Date("2014-12-01", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2015-04-10", "%Y-%m-%d"), 
       xmax = as.Date("2015-11-28", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2016-04-01", "%Y-%m-%d"), 
       xmax = as.Date("2016-12-31", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "lavender", 
      linetype = 0, 
      alpha = 0.05) + 
    geom_line(size = 0.75) + 
    xlab("") + ylab("Elevation (ft.)") + 
    scale_color_brewer(palette = "Spectral") + 
    scale_x_date(breaks = date_breaks("1 year"), 
       date_labels = ("%b %Y")) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), 
     panel.grid.major.x = element_blank(), 
     panel.grid.major.y = element_line(size=.1, color="gray"), 
     panel.grid.minor = element_blank(), 
     axis.line.x = element_line(color = "black"), 
     axis.line.y = element_line(color = "black"), 
     panel.background = element_rect(fill = "white"), 
     legend.key=element_blank()) 

Может кто-нибудь мне помочь удалить лавандовый фон из моей легенды? Вот глава кода:

  Date   Well Elev 
1 2002-05-23   MW-3 929.04 
2 2002-05-29   MW-3 929.39 
3 2002-05-31   MW-3 929.37 
4 2002-06-05   MW-3 929.36 
5 2002-06-12   MW-3  NA 
6 2002-06-13   MW-3 929.47 
7 2002-06-19   MW-3 929.42 
8 2002-06-26   MW-3 930.02 
9 2002-07-05   MW-3 930.00 

ответ

3

Вы можете избавиться от лаванды фона в легенде, добавив inherit.aes=FALSE внутри geom_rect. Я также хотел указать, что вы можете значительно сократить количество кода, необходимого для вашего графика. Вместо отдельных звонков на geom_rect для каждой пары дат вам просто нужно иметь один вектор из xmin дат и одного вектора xmax дат в один звонок geom_rect. Например:

Data = data.frame(x=as.Date(c("2005-01-01", "2010-01-01")), y=c(5,6), group=c("A","B")) 

rect.data = data.frame(xmin = as.Date(c("2003-08-11","2004-04-29","2016-04-01")), 
         xmax = as.Date(c("2003-12-14","2004-12-20","2016-12-13")), 
         ymin = -Inf, 
         ymax = Inf) 

ggplot(Data, aes(x, y, colour=group)) + 
    geom_rect(data=rect.data, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), 
      fill="lavender", linetype=0, alpha=1, inherit.aes=FALSE) + 
    geom_point(size=3) + 
    theme_classic() 

enter image description here

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

+0

Спасибо @ eipi10. «Inherit.aes = FALSE» сделал трюк. Что касается вашего второго момента о значительно сокращении кода - спасибо за этот совет. Я знал, что должен быть более простой способ! Однако, когда я устанавливаю свой фреймворк дат прямоугольника и запускаю свой код ggplot, как вы это делали выше, я получаю сюжет без прямоугольников. Вы знаете, почему это может быть? – snalven

+0

Можете ли вы опубликовать образец своих данных и код, который вы используете. Трудно диагностировать проблему, не видя точного кода и данных. Отправьте образец данных, вставив в свой вопрос вывод 'dput (data_sample)'. – eipi10

+0

Извините, @ eipi10, я новичок в Stack Overflow, и образец данных/мой код слишком длинный для комментария ... где я должен его публиковать? – snalven

Смежные вопросы