Jak tworzyć interaktywne wykresy?

Najłatwiejszy sposób aby budować interaktywne wykresy w R, to skorzystanie z pakietu rCharts (http://rcharts.io/).

Pakiet rCharts tworzy stronę HTML z osadzonymi bibliotekami JavaScript. Można korzystać z bibliotek NVD3, Highcharts, Leaflet i innych. Pełna lista znajduje się na stronie pakietu rCharts.

Poniżej przedstawimy kilka wybranych przykładów. Szczegółowa lista dostępnych opcji znajduje się na tej stronie.

Biblioteka NVD3

Wykresy wykorzystujące bibliotekę NVD3 można wykonać używać funkcji nPlot(). Szeroki opis dostępnych wykresów w tej bibliotece znajduje się tutaj http://nvd3.org/.

Wykres liniowy

Przedstawmy wykres liniowy na bazie danych o śmiertelności osób w różnych wieku. Dane pochodzą ze strony http://www.mortality.org/. Szczegółowy opis co znajduje się w której kolumnie znajduje się na na tej stronie.

Wybierzemy tylko dane z roku 2009 i pokażemy wyniki dla obu płci. Zacznijmy od wczytania danych.

przezycia <- archivist::aread("pbiecek/Przewodnik/arepo/609491e5ec491f240cbeafe377743e21")  
head(przezycia)
##   Year Age      mx      qx   ax     lx   dx    Lx      Tx    ex Gender
## 1 1958   0 0.06562 0.06249 0.24 100000 6249 95231 6863376 68.63 Female
## 2 1958   1 0.00474 0.00472 0.50  93751  443 93530 6768146 72.19 Female
## 3 1958   2 0.00173 0.00173 0.50  93308  162 93228 6674616 71.53 Female
## 4 1958   3 0.00119 0.00119 0.50  93147  111 93091 6581388 70.66 Female
## 5 1958   4 0.00085 0.00085 0.50  93036   79 92996 6488297 69.74 Female
## 6 1958   5 0.00071 0.00071 0.50  92957   66 92924 6395301 68.80 Female
przezycia2009 <- przezycia[przezycia$Year == 2009 &
                             przezycia$Age != "110+",]

Przystępujemy do tworzenia wykresu.

Po zbudowaniu wykresu funkcją nPlot(), należy dookreślić szerokość i wysokość wykresy oraz nazwy osi.

library(rCharts)
p1 <- nPlot(mx ~ Age, group = "Gender", data = przezycia2009, type = "lineChart")
p1$chart(yScale = "#! d3.scale.log() !#")
p1$xAxis(axisLabel = 'Wiek')
p1$yAxis(axisLabel = 'Śmiertelność')
p1$set(width = 750, height = 590)
# p1$save("rCharts1.html", standalone=TRUE)

Następnie wykres jest gotowy do umieszczenia na stronie www. Wykres jest stroną html, można ją umieścić na innej stronie poleceniem iframe.

Wykres punktowy

Ta sama funkcja może być użyta do zbudowania wykresu punktowego. Wystarczy jako typ wskazać type="scatterChart".

Na poniższym przykładzie pracujemy z danymi o współczynniku liczby zgonów i urodzin na 1000 mieszkańców w różnych krajach. Dodatkowo pokazane jest jak można modyfikować informację o etykiecie.

library(SmarterPoland)
head(countries)
##               country birth.rate death.rate population continent
## 1         Afghanistan       34.1        7.7      30552      Asia
## 2             Albania       12.9        9.4       3173    Europe
## 3             Algeria       24.3        5.7      39208    Africa
## 4             Andorra        8.9        8.4         79    Europe
## 5              Angola       44.1       13.9      21472    Africa
## 6 Antigua and Barbuda       16.5        6.8         90  Americas
p2 <- nPlot(death.rate ~ birth.rate, group = "continent", data = countries, type = "scatterChart")
p2$xAxis(axisLabel = 'Zgonów na 1000 osób')
p2$yAxis(axisLabel = 'Urodzin na 1000 osób')
p2$chart(tooltipContent = "#! function(key, x, y, e){ 
  return 'Kraj: ' + e.point.country 
} !#")
p2$set(width = 750, height = 590)
# p2$save("rCharts2.html", standalone=TRUE)

Biblioteka MorrisJS

Biblioteka MorrisJS udostępnia inne ciekawe wykresy, głównie liniowe i słupkowe. Przegląd wykresów z tej biblioteki znajduje się na stronie http://morrisjs.github.io/morris.js/

library(tidyr)
eZycia <- przezycia %>%
  dplyr::filter(Age == 0) %>%
  dplyr::mutate(Year = as.character(Year)) %>%
  dplyr::select(Year, Gender, ex) %>%
  spread(Gender, ex)
head(eZycia)
##   Year Female  Male
## 1 1958  68.63 63.03
## 2 1959  68.34 62.62
## 3 1960  70.63 64.81
## 4 1961  70.81 64.86
## 5 1962  70.54 64.55
## 6 1963  71.52 65.41
m1 <- mPlot(x = 'Year', y = c('Female', 'Male'), type = 'Line',
  data = eZycia, pointSize = 0, lineWidth = 1)
m1$set(width = 750, height = 590)
# m1$save("rCharts3.html", standalone=TRUE)

Biblioteka Leaflet

Biblioteka Leaflet jest świetnym narzędzie do przedstawiania danych na mapach.

Wystarczy skazać współrzędne początkowego widoku, dodać markery i można pokazywać interaktywną mapę.

map1 = Leaflet$new()
map1$setView(c(52.22, 21), zoom = 12)
map1$marker(c(52.22223, 21.00728), bindPopup = "Politechnika Warszawska, MiNI")
map1$marker(c(52.21167, 20.9815), bindPopup = "Uniwersytet Warszawski, MIM")
map1$marker(c(52.23925, 21.01742), bindPopup = "Uniwersytet Warszawski, Centrala")
# map1$save("rCharts4.html", standalone=TRUE)

Więcej

Kompletna lista wykresów wspieranych przez pakiet rCharts znajduje się na stronie http://www.rpubs.com/dnchari/rcharts.