2013-07-08 1 views
28

같은 제목이지만 완전히 질문을 다시 언급했습니다.geom_rect 및 alpha -이 값은 하드 코딩 된 값으로 작동합니까?

알파는 첫 번째 플롯에서 작동하지만 두 번째 플롯에서는 작동하지 않는 이유는 무엇입니까? 왜 하드 코드 된 값을 사용하면 rect가 올바른 위치에 그려지지만 투명하게 만들지는 못했지만 data.frame에서는 예상대로 작동합니까? 질문을 명확히하기위한

mtcars$cyl <- factor(mtcars$cyl) 
mtcars$am <- factor(mtcars$am) 

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2) 

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2) 

답변

56

감사합니다. 이것은 나에게 수수께끼였다. 그래서 나는 google에 갔고, learning something new를 끝내었다 (그들의 예에서 약간의 변화를 피하고 난 후에). 분명히하고있는 일은 서로 직각으로 많은 사각형을 그려서 원하는 반투명을 효과적으로 무효화하는 것입니다. 그래서, 유일한 방법은 플롯에 전 세계적으로 당신의 data.frame을 할당하지 않습니다 ... ...

ggplot() + 
    geom_density(data=mtcars, aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), alpha=0.2, fill="red") 

이 사각형은 별도의 DF 좌표 하드 코딩에 있습니다 극복, 또는합니다. 대신 원하는 레이어 (이 예제에서는 geom_density)에서만 사용하고 다른 레이어는 자유롭게 두십시오! 당신이하지 않아도,

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    annotate("rect", xmin=100, xmax=200, ymin=0, ymax=Inf, alpha=0.2, fill="red") 

후자의 방법을 사용하면 전체 줄거리에 대해 하나의 data.frame을 사용할 수 있습니다 또는 더 나은 아직, 기본 안양 아래에서 플롯을 수정 annotate를 사용하여 각 층에 대해 동일한 df를 지정하십시오.

enter image description here

+2

그냥 여기에 덧붙여 라. 이것을 scale_y_continuous와 함께 사용하는 경우 (limits = c (0.005,0.015)), 중단 점을 정확히 지정하고 (ymin = 0, ymax = Inf) 가질 수 없으며 최소/최대 값이 떨어지게됩니다 스케일 한계 내에서. – nzcoops

+0

+1 이것은 ggplot과 함께했던 모든 알파 스펙 문제를 설명합니다! – geotheory

+1

이것은 대단합니다!하지만 여전히 왜 geom_rect (..., alpha = .1)'doesn – Stuart

1
ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2)) + 
    geom_rect(alpha=.2) + 
    geom_rect(data=data.frame(xmin=3, xmax=6, ymin=3, ymax=5), 
      aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax), 
      fill="green", alpha=.2) 
+0

감사를

두 가지 방법 모두 동일한 플롯을 반환 @ user2559998. 나는 그걸 가지고 놀랐다. 여전히 값을 하드 코딩하는 것과 다른 점은 모르겠다./ – nzcoops

7

다른 해결 방법이 그려진 데이터가 하나의 사각형을 보장하기 위해 개체를 단일 행을 geom_rect 제공하는 것입니다 :

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(data=mtcars[1,], aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2) 

enter image description here

+0

면접을 할 때 찾고자하는 해결책입니다. 감사합니다! – Nova

관련 문제