데이터 시각화에서는 특정 부분을 강조하기 위해 사각형, 라벨, 선 등을 추가하는 경우가 많습니다.
특히 geom_rect()는 그래프 위에 사각형을 그릴 때 유용하게 사용되는데요.
그런데 alpha 값을 설정해도 투명도가 적용되지 않는 경우가 있습니다.
왜 이런 일이 발생하는지, 어떻게 해결할 수 있을지에 대해 알아보겠습니다.
geom_rect의 alpha(투명도) 값이 적용안됨
먼저, 베이스라인 코드는 다음과 같습니다.
mpg |> ggplot(aes(x=displ, y=hwy)) +
geom_point() +
geom_text_repel(data = potential_outliers,
aes(label=model)) +
geom_point(data = potential_outliers,
color = "red") +
geom_point(data = potential_outliers,
color = "red",
size = 3, shape = "circle open") +
geom_hline(yintercept = 40, color = "red") -> p1
이제 우측 하단에 빨간 점들이 모여있는 구간을 강조하기 위해 geom_rect를 추가해 보겠습니다.
p1 + geom_rect(
xmin = 5, xmax = 7.1, ymin = 22, ymax = 26,
alpha = 0.2, fill = "yellow"
)
어 이런... 투명도(alpha)를 설정했지만 예상과 달리 사각형이 투명하지 않고, 내부의 점들이 보이지 않습니다.
왜 투명도가 적용이 안될까요?
이는 geom_rect()가 단순히 한 개의 사각형을 그리는 것이 아니라, 데이터 포인트 개수만큼 동일한 사각형을 반복해서 그리기 때문입니다.
앞서 mpg 데이터셋에는 234개의 데이터가 존재합니다.
따라서 우리가 [5~7.1] X [22~26]을 포함하는 박스를 그리려고 하면 한번만 그리는 것이 아닌 234개의 동일한 박스를 생성하므로 겹쳐지면서 불투명하게 변하게 되는 것 입니다.
즉, 투명도(alpha)를 설정하더라도 중첩되면서 효과가 사라지게 되는 것이죠.
해결 방법: annotate()를 사용하자!
이 문제를 해결하려면, geom_rect() 대신 annotate() 함수를 사용하면 됩니다.
annotate()는 데이터 개수와 무관하게 한 번만 그리기 때문에 원하는 투명도를 적용할 수 있습니다.
p1 + annotate(geom="rect",
xmin = 5, xmax = 7.1, ymin = 22, ymax = 26,
alpha = 0.2, fill = "yellow")
'Data Science > Visualization' 카테고리의 다른 글
[Visualization with R] 1. Bar Chart (막대 그래프) (0) | 2023.09.07 |
---|---|
[R] Scatterplot Matrix (산점도행렬) (0) | 2023.09.01 |
[R] ggplot2 Visualization (0) | 2023.03.29 |