Dane nt koloru nadwozie nowozarejestrowanych samochodów w Szwecji pobrano ze strony https://transportstyrelsen.se/sv/Nyhetsarkiv/2019/vitt-nu-vanligare-an-svart-i-sverige/
Dane ręcznie zamieniono na plik csv, który wczytujemy poleceniem:
o <- read.csv(file='szwecja_kolory_samochodow.csv', sep=';', header=T)
Plik ma 24 wierszy, co odpowiada 24 kolorom. Kolory są następujące
levels(o$kolor)
## [1] "biały" "brązowy" "ciemnobrązowy" "ciemnoczerwony"
## [5] "ciemnoniebieski" "ciemnoszary" "ciemnozielony" "czarny"
## [9] "czerwony" "fioletowy" "jasnobrÄ…zowy" "jasnoniebieski"
## [13] "jasnoszary" "jasnozielony" "jasnożółty" "niebieski"
## [17] "nieznany" "pomarańczowy" "różowy" "srebrny"
## [21] "szary" "wielobarwny" "zielony" "żółty"
Zawartość pliku można przedstawić w postaci następującej tabeli:
library(knitr)
carsNo2019 <- sum(o$y2019)
carsNo2016 <- sum(o$y2016)
print (carsNo2019)
## [1] 6243511
o <- o %>% mutate(y2019f = y2019/carsNo2019 *100, y2016f = y2016/carsNo2016 *100 )
kable(o,
col.names = c('Farg', 'Kolor', '2016', '2019', 'Różnica', '2016%', '2019%'))
Farg | Kolor | 2016 | 2019 | Różnica | 2016% | 2019% |
---|---|---|---|---|---|---|
Vit | biały | 791199 | 987073 | 195874 | 15.8095821 | 13.2046171 |
Svart | czarny | 835933 | 932864 | 96931 | 14.9413367 | 13.9511996 |
Grå | szary | 600007 | 692040 | 92033 | 11.0841480 | 10.0137420 |
Ljusgrå | jasnoszary | 451165 | 380375 | -70790 | 6.0923253 | 7.5296620 |
Mörkgrå | ciemnoszary | 221661 | 244765 | 23104 | 3.9203102 | 3.6993836 |
Röd | czerwony | 662221 | 650194 | -12027 | 10.4139161 | 11.0520548 |
Mörkröd | ciemnoczerwony | 169826 | 141614 | -28212 | 2.2681789 | 2.8342899 |
Silver | srebrny | 533380 | 559892 | 26512 | 8.9675825 | 8.9017790 |
Blå | niebieski | 439172 | 433366 | -5086 | 6.9410625 | 7.3295063 |
Ljusblå | jasnoniebieski | 127643 | 122209 | -5434 | 1.9573762 | 2.1302819 |
Mörkblå | ciemnoniebieski | 307900 | 272688 | -35212 | 4.3675426 | 5.1386587 |
Brun | brÄ…zowy | 91956 | 99197 | 7241 | 1.5888016 | 1.5346882 |
Ljusbrun | jasnobrÄ…zowy | 167352 | 164004 | -3348 | 2.6267912 | 2.7930003 |
Mörkbrun | ciemnobrązowy | 18262 | 20860 | 2598 | 0.3341069 | 0.3047814 |
Grön | zielony | 131349 | 115143 | -16206 | 1.8442027 | 2.1921328 |
Mörkgrön | ciemnozielony | 121162 | 94667 | -26495 | 1.5162462 | 2.0221181 |
Ljusgrön | jasnozielony | 76711 | 67112 | -9599 | 1.0749080 | 1.2802587 |
Flerfärgad | wielobarwny | 67089 | 74695 | 7606 | 1.1963621 | 1.1196735 |
Okänd | nieznany | 32211 | 52799 | 20488 | 0.8456620 | 0.5375815 |
Gul | żółty | 55744 | 51479 | -4265 | 0.8245200 | 0.9303325 |
Ljusgul | jasnożółty | 28472 | 25583 | -2889 | 0.4097534 | 0.4751799 |
Ljusröd | różowy | 33499 | 29045 | 4454 | 0.4652030 | 0.5590774 |
Orange | pomarańczowy | 16208 | 20416 | 4208 | 0.3269955 | 0.2705014 |
Lila | fioletowy | 11714 | 11431 | -283 | 0.1830861 | 0.1954993 |
##o
Redukujemy liczbę kolorów do podstawowych:
o <- o %>% mutate(kolor=recode(kolor, bialy="bialy",
szary="szary", jasnoszary="szary",ciemnoszary="szary",
brÄ…zowy='brÄ…zowy', jasnobrÄ…zowy='brÄ…zowy', ciemnobrÄ…zowy='brÄ…zowy',
niebieski='niebieski', jasnoniebieski='niebieski', ciemnoniebieski='niebieski',
zielony='zielony', jasnozielony='zielony', ciemnozielony='zielony',
czerwony='czerwony', ciemnoczerwony='czerwony',
żółty="żółty", jasnożółty='żółty'
))
Teraz kolorów jest 14:
levels(o$kolor)
## [1] "biały" "brązowy" "czerwony" "niebieski" "szary"
## [6] "zielony" "czarny" "fioletowy" "żółty" "nieznany"
## [11] "pomarańczowy" "różowy" "srebrny" "wielobarwny"
Usuwamy kolor nieznany:
o <- o %>% filter (kolor != 'nieznany')
p1 <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019)) %>%
ggplot(aes(x = reorder(kolor, y2019 ))) +
geom_bar(aes(y = y2019 ), stat="identity", alpha=.25, fill=default_cyan ) +
xlab(label="kolor") +
ylab(label="liczba") +
ggtitle("Kolory nowych samochodów w Szwecji 2019") +
##
theme(axis.text = element_text(size = 8)) +
theme(plot.title = element_text(hjust = 0.5)) +
coord_flip()
## `summarise()` ungrouping output (override with `.groups` argument)
p1
Dodanie etykiet z wartościami
p1t <- p1 +
geom_text(aes(label=sprintf("%.0f", y2019), y= y2019 ),
vjust=0.25, hjust=1.25, size=2, color='brown3' )
p1t
Słupki odpowiadające niskim wartościm wyglądają tak sobie. Można usunąć np etykiety dla wartości mniejszych niż 50 tys.
#qq <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019)) %>%
# mutate(y2019t = y2019) %>%
# mutate ( y2019t = replace(y2019t, which( y2019t < 50000), NA))
# wartości mniejsze od 50 tys zmień na NA
p1x <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019)) %>%
mutate(y2019t = y2019) %>%
mutate ( y2019t = replace(y2019t, which( y2019t < 50000), NA)) %>%
ggplot(aes(x = reorder(kolor, y2019 ))) +
geom_bar(aes(y = y2019 ), stat="identity", alpha=.25, fill=default_cyan ) +
xlab(label="kolor") +
ylab(label="liczba") +
ggtitle("Kolory nowych samochodów w Szwecji 2019") +
##
theme(axis.text = element_text(size = 8)) +
theme(plot.title = element_text(hjust = 0.5)) +
##
geom_text(aes(label=sprintf("%.0f", y2019t), y= y2019t ),
vjust=0.25, hjust=1.25, size=2, color='brown3' ) +
##
coord_flip()
## `summarise()` ungrouping output (override with `.groups` argument)
p1x
Popularny ale niezalecany. Trudno nawet powiedzieć czemu używany, bo wykres słupkowy jest od niego lepszy pod każdym względem
library(RColorBrewer)
#mycols <- brewer.pal(14, "Set1")
mycolors <- c(szary='darkgray', biały='white',
czarny='black', niebieski='blue', czerwony='red',
srebrny='whitesmoke', brÄ…zowy='tan4', zielony='limegreen',
żółty='yellow', wielobarwny='darkturquoise', różowy='hotpink',
pomarańczowy='darkorange', fioletowy='darkviolet')
#mycolors = c(brewer.pal(name="Dark2", n = 8), brewer.pal(name="Paired", n = 6))
p2 <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019)) %>%
mutate(ypos = cumsum(y2019) - 0.5*y2019) %>%
arrange(desc(kolor)) %>%
ggplot(aes(x = "" )) +
geom_bar(aes(y = y2019, fill=kolor ), width=1, stat="identity", color="blue") +
#xlab(label="kolor") +
#ylab(label="liczba") +
scale_fill_manual(values = mycolors) +
geom_text(aes(y = ypos, label = y2019), color = "black", size=3) +
ggtitle("Kolory nowych samochodów w Szwecji 2019") +
coord_polar("y", start = 0) +
theme_void()
p2
Przy większej od 6 liczbie kategorii w zasadzie nieczytelny (co widać)
#oo <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019), y2016=sum(y2016))
## porównanie pomiędzy dwoma latami
p3 <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019), y2016=sum(y2016)) %>%
#pivot_longer(cols = c(y2019, y2016), names_to = "rok", values_to = "value") %>%
ggplot(aes(x = reorder(kolor, y2019 ))) +
geom_point(aes(y = y2019, color='y2019' ), alpha=.25 ) +
geom_point(aes(y = y2016, color='y2016' ), alpha=.25 ) +
xlab(label="kolor") +
ylab(label="liczba") +
ggtitle("Kolory nowych samochodów w Szwecji 2019") +
## labels jest zbędne
scale_color_manual(name="", labels =c(y2019="y2019", y2016="y2016"),
values = c(y2019="red", y2016="blue" ) ) +
##
theme(axis.text = element_text(size = 8)) +
theme(plot.title = element_text(hjust = 0.5)) +
coord_flip()
## `summarise()` ungrouping output (override with `.groups` argument)
p3
Porównywanie wykresów kołowych to beznadziejna sprawa:
p2b <- o %>% group_by(kolor)%>% summarise(y2016=sum(y2016)) %>%
mutate(ypos = cumsum(y2016) - 0.5*y2016) %>%
arrange(desc(kolor)) %>%
ggplot(aes(x = "" )) +
geom_bar(aes(y = y2016, fill=kolor ), width=1, stat="identity", color="blue") +
#xlab(label="kolor") +
#ylab(label="liczba") +
scale_fill_manual(values = mycolors) +
geom_text(aes(y = ypos, label = y2016), color = "black", size=3) +
ggtitle("Kolory nowych samochodów w Szwecji 2016") +
coord_polar("y", start = 0) +
theme_void()
p2ab <- ggarrange(p2, p2b, ncol= 2, nrow = 1)
p2ab
Zamiast liczebności można używać udziałów w całości (popularnie zwanych procentami)
p4 <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019), y2016=sum(y2016)) %>%
mutate(y2019 = y2019/carsNo2019 *100, y2016 = y2016/carsNo2016 *100 ) %>%
#pivot_longer(cols = c(y2019, y2016), names_to = "rok", values_to = "value") %>%
ggplot(aes(x = reorder(kolor, y2019 ))) +
geom_point(aes(y = y2019, color='y2019' ), alpha=.25 ) +
geom_point(aes(y = y2016, color='y2016' ), alpha=.25 ) +
xlab(label="kolor") +
ylab(label="%") +
ggtitle("Kolory nowych samochodów w Szwecji 2019") +
## labels jest zbędne
scale_color_manual(name="", labels =c(y2019="y2019", y2016="y2016"),
values = c(y2019="red", y2016="blue" ) ) +
##
theme(axis.text = element_text(size = 8)) +
theme(plot.title = element_text(hjust = 0.5)) +
coord_flip()
p4
Wykres kołowy jeszcze raz (trochę lepiej bo liczby niższe)
p5 <- o %>% group_by(kolor)%>% summarise(y2019=sum(y2019)) %>%
mutate(y2019 = y2019/carsNo2019 *100 ) %>%
arrange(desc(kolor)) %>%
mutate(ypos = cumsum(y2019) - 0.5*y2019) %>%
ggplot(aes(x = "" )) +
geom_bar(aes(y = y2019, fill=kolor, ), color='blue', width=.5, stat="identity") +
#xlab(label="kolor") +
#ylab(label="liczba") +
scale_fill_manual( values = mycolors ) +
geom_text(aes(y = ypos, label = sprintf("%.1f", y2019)), color = "black", size=3) +
ggtitle("Kolory nowych samochodów w Szwecji 2019") +
coord_polar("y", start = 0) +
theme_void()
p5