2012-05-12 4 views
11

내가 뭘 잘못하고 있니? 투명 회색으로 대체 24 시간 매일 직사각형을 음영 처리하려고합니다. 그러나 for-loop의 마지막 사각형 만 그려집니다 (?!?) for 루프 대신 수동으로 작업하는 경우 제대로 작동합니다.ggplot2 : 플롯에서 대체 요일을 투명하게 음영 처리하는 방법

for 루프를 피하기 위해 벡터화하는 방법이 있습니까? (그리고 qplot으로 끝낼 수 있습니까?) 저는 ggplot2를 처음 접했고 예 해들리의 사이트, 책 및 예제를 읽었습니다.

두 번째 문제 : 미적으로 알파를 설정해도 배경을 가리는 직사각형이 방지되지 않습니다. 투명성을 얻는 방법?

dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192)) 
# (ymin, ymax are computed for this series using min/max(na.rm==TRUE)) 
ymax <- 5.0 
ymin <- 0.0 
p <- ggplot(dat, aes(x=my_x_series,alpha=0.9)) 
alternate_daily_bars_xmin <- c(4,52,100,148) 

for (shade_xmin in alternate_daily_bars_xmin) { 
    shade_xmax <- min(shade_xmin+24, 192) # clamp at end of x-range 
    p <- p + geom_rect(aes(alpha=0.5,xmin=shade_xmin,xmax=shade_xmax,ymin=ymin,ymax=ymax), fill='gray80') 
} 
p <- p + geom_point(aes(y=my_y_series)) 
p 
+0

추가 된 임의의 정의. 저를 때리는 명령 구문입니다. 제 생각에 각 geom_rect는 예상했던 것처럼 합성 대신 마지막을 덮어 씁니다. – smci

답변

26

사각형을 플롯하려면 각 행에 단일 사각형 좌표가 들어있는 데이터 프레임을 만드십시오. 이 구조는 사각형이 아닌 모든 다각형에 적용됩니다. 일단 이것을 알게되면 루프를 피하는 것이 쉽습니다.

그런 다음 변수를 미적인 것으로 매핑했는지 여부를 조심하십시오. 귀하의 경우 원하는 값으로 alpha을 설정해야하므로 aes() 설정의 일부가 아닙니다. 재현성 * 날엔 *의

library(ggplot2) 

dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192)) 
rect_left <- c(4,52,100,148) 
rectangles <- data.frame(
    xmin = rect_left, 
    xmax = rect_left + 24, 
    ymin = 0, 
    ymax = 5 
) 

ggplot() + 
    geom_rect(data=rectangles, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), 
      fill='gray80', alpha=0.8) + 
    geom_point(data=dat, aes(x=my_x_series, y=my_y_series)) 

enter image description here

+0

아름다운. 이 중 일부 또는 전부를 *'qplot()'*로 처리 할 수 ​​있습니까? – smci

+9

아마도 그 모든 것이 겠지만,'qplot'으로는 결코 괴롭히지 않았습니다. 'ggplot'은 배우기가 정말로 어렵지 않으며, 여러분은 여러분이 얻게 될 것을 정확히 알고 있습니다. 죄송합니다. – Andrie

관련 문제