R에서 롤리팝 차트를 만드는 방법


막대형 차트와 마찬가지로 막대형 차트는 범주형 변수의 양적 값을 비교하는 데 유용합니다. 막대를 사용하는 대신 막대 사탕 차트는 끝에 원이 있는 선을 사용하여 정량적 값을 나타냅니다.

막대 사탕 차트는 차트의 색상 양을 최소화하고 차트의 선이나 다른 그래픽이 아닌 차트의 실제 값에 독자의 주의를 집중시키면서 여러 범주를 비교할 수 있는 좋은 방법입니다. 많은 사람들은 또한 막대사탕 판이 미학적으로 만족스럽다고 생각합니다.

이 튜토리얼에서는 다음 롤리팝 차트를 만드는 데 필요한 단계를 살펴보겠습니다.

예: R의 Lollipop 차트

이 예에서는 mtcars 내장 R 데이터 세트를 사용합니다.

 #view first six rows of mtcars
head(mtcars)

기본 롤리팝 차트

다음 코드는 방법을 보여줍니다.   데이터세트에 있는 자동차 32대 각각의 mpg (갤런당 마일)를 비교하는 막대사탕 차트를 만듭니다.

자동차 이름은 데이터세트의 행 이름에 정의되어 있으므로 먼저 이러한 행 이름을 포함하는 데이터세트에 새 열을 만듭니다.

다음으로 롤리팝 차트를 만드는 데 사용할 ggplot2 라이브러리를 로드합니다.

ggplot2에서는 geom_segment를 사용하여 플롯에 선을 만듭니다. 시작 및 끝 x 값을 각각 0mpg 로 설정했습니다. 시작 및 끝 y 값을 char 로 설정합니다.

 #create new column for car names
mtcars$car <- row.names(mtcars)

#load ggplot2 library
library(ggplot2)

#create lollipop chart
ggplot(mtcars, aes(x = mpg, y = car)) +
        geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
        geom_point()

라벨 추가

labelgeom_text 인수를 사용하여 차트에 레이블을 추가할 수도 있습니다.

 ggplot(mtcars, aes(x = mpg, y = car, label = mpg )) +
        geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
        geom_point() +
        geom_text(nudge_x = 1.5)

또는 각 줄의 끝에 레이블을 배치하는 대신 원을 더 크게 만들고 레이블의 글꼴 색상을 흰색으로 변경하여 원 내부에 레이블을 배치할 수 있습니다.

 ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) +
        geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
        geom_point( size = 7 ) +
        geom_text( color = 'white', size = 2 )

값을 평균과 비교

막대사탕 차트를 사용하여 값을 특정 숫자와 비교할 수도 있습니다. 예를 들어 데이터 세트에서 평균 mpg 값을 찾은 다음 각 자동차의 mpg를 평균과 비교할 수 있습니다.

다음 코드는 dplyr 라이브러리를 사용하여 평균 mpg 값을 찾은 다음 mpg의 오름차순으로 자동차를 정렬합니다.

 #load library dplyr
library(dplyr)

#find mean value of mpg and arrange cars in order by mpg descending
mtcars_new <- mtcars %>%
                arrange(mpg) %>%
                mutate(mean_mpg = mean(mpg),
                       flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE),
                       car = factor(car, levels = .$car))

#view first six rows of mtcars_new
head(mtcars_new)

그런 다음 다음 코드는 원의 색상을 플래그 값(이 경우 TRUE 또는 FALSE)과 동일하게 설정하고 각 자동차의 시작 x 값을 평균 mpg 값과 동일하게 설정하여 막대 사탕 차트를 만듭니다.

 ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) +
        geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) +
        geom_point()

이러한 유형의 색상 팔레트를 사용하면 어떤 자동차가 데이터 세트 평균보다 mpg가 낮고 높은지 쉽게 확인할 수 있습니다.

기본적으로 R은 차트 색상으로 파란색과 빨간색을 사용합니다. 그러나 scale_color_manual 인수를 사용하면 원하는 색상을 사용할 수 있습니다.

 ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
        geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
        geom_point() +
        scale_color_manual(values = c("purple", "blue"))

차트 미학 변경

마지막으로 ggplot2 의 광범위한 기능을 사용하여 차트의 미학을 추가로 수정하고 전문적인 최종 제품을 만들 수 있습니다.

 ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
        geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") +
        geom_point() +
        annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) +
        annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) +
        geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23),
                     arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") +
        geom_segment(aes(x = 26.5, xend = 26.5, y = 18, yend = 14),
                     arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") +
        labs(title = "Miles per Gallon by Car") +
        theme_minimal() +
        theme(axis.title = element_blank(),
              panel.grid.minor = element_blank(),
              legend.position = "none",
              text = element_text(family = "Georgia"),
              axis.text.y = element_text(size = 8),
              plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0),
              plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)),
              plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다