Jak utworzyć wykres lollipop w r


Podobnie jak wykres słupkowy, wykres Lollipop jest przydatny do porównywania wartości ilościowych zmiennej kategorycznej. Zamiast używać słupków, wykres Lollipop wykorzystuje linie z okręgami na końcu, aby przedstawić wartości ilościowe.

Wykres Lollipop to świetny sposób na porównanie wielu kategorii przy jednoczesnej minimalizacji ilości kolorów na wykresie i skupieniu uwagi czytelnika na rzeczywistych wartościach na wykresie, a nie na liniach lub innych grafikach na wykresie. Wiele osób uważa również, że tabliczka Lollipop jest estetyczna.

W tym samouczku omówimy kroki niezbędne do utworzenia następującego wykresu Lollipop:

Przykład: wykres Lollipop w języku R

W tym przykładzie użyjemy wbudowanego zestawu danych R mtcars :

 #view first six rows of mtcars
head(mtcars)

Podstawowy wykres Lollipop

Poniższy kod ilustruje, jak to zrobić   aby utworzyć wykres Lollipop w celu porównania mpg (mil na galon) każdego z 32 samochodów w zbiorze danych.

Nazwy samochodów są zdefiniowane w nazwach wierszy zbioru danych, dlatego najpierw tworzymy w zbiorze danych nową kolumnę zawierającą te nazwy wierszy.

Następnie ładujemy bibliotekę ggplot2 , którą wykorzystamy do stworzenia wykresu Lollipop.

W ggplot2 używamy geom_segment do tworzenia linii na wykresie. Ustawiamy początkowe i końcowe wartości x odpowiednio na 0 i mpg . Ustawiamy początkowe i końcowe wartości y jako 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()

Dodawanie etykiet

Możemy także dodać etykiety do wykresu za pomocą argumentów label i geom_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)

Lub zamiast umieszczać etykiety na końcu każdej linii, moglibyśmy umieścić je wewnątrz samych okręgów, powiększając okręgi i zmieniając kolor czcionki etykiety na biały:

 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 )

Porównaj wartości ze średnią

Możemy także skorzystać z wykresu Lollipop, aby porównać wartości z konkretną liczbą. Na przykład możemy znaleźć średnią wartość mpg w zbiorze danych, a następnie porównać mpg każdego samochodu ze średnią.

Poniższy kod wykorzystuje bibliotekę dplyr do znalezienia średniej wartości mpg , a następnie uporządkowania samochodów w kolejności rosnącej :

 #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)

Następnie poniższy kod tworzy wykres Lollipop, ustawiając kolor okręgu na równy wartości flagi (w tym przypadku PRAWDA lub FAŁSZ), a początkową wartość x dla każdego samochodu na równą średniej wartości 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()

Korzystając z tego typu palety kolorów, możemy łatwo określić, które samochody mają niższe, a które wyższe spalanie niż średnia ze zbioru danych.

Domyślnie R używa koloru niebieskiego i czerwonego jako kolorów wykresu. Możemy jednak użyć dowolnych kolorów, używając argumentuscale_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"))

Zmień estetykę wykresu

Wreszcie możemy wykorzystać szerokie możliwości ggplot2 do dalszej modyfikacji estetyki wykresu i stworzenia profesjonalnie wyglądającego produktu końcowego:

 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))

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *