2017-02-01 4 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

당신은 geom_rect 내부 inherit.aes=FALSE을 추가하여 전설의 라벤더 배경을 제거 얻을 수 있습니다. 또한 그래프에 필요한 코드의 양을 크게 줄일 수 있다고 지적하고 싶습니다. 각 날짜 쌍에 대해 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