Polityka jednego dziecka a interaktywne wykresy w R.

October 4, 2012
By

This post was kindly contributed by SmarterPoland » R - go there to comment and to read the full post.

We wtorek pisałem o tym jak problemy demograficzne Polski wyglądają na tle innych państw. Dziś też nawiążę do demografii, ale myśl przewodnia dotyczy aspektów technicznych.

Na podstawie danych o rocznej liczbie narodzin na 1000 mieszkańców i o średnim wieku urodzenia pierwszego dziecka pokażę jak w R wykonać grafikę SVG, która jest interaktywna. Tzn po umieszczeniu na stronie pozwala na pewną interakcję.

Zaczęło się od listu od Macieja B. na temat pakietu do programu R o nazwie ‘SVGAnnotation’ (dostępny na OmegaHat). Pakiet ten pozwala na zapisywanie wykresów R do formatu SVG, a dodatkowo pozwala na zawarciu w wykresie prostej interakcji, typu: podpisy aktywowane najechaniem na myszki na punkt/obszar, dodanie suwaka czy pól wyboru. Proste elementy ale użyteczne i do tego można je generować bezpośrednio z R! Nadarzyła się okazja by wypróbować ten pakiet. Nie wszystko jeszcze w nim działa, są problemy z kodowaniem, ale i tak ma interesujące możliwości, jedną z nich pokażę poniżej.

Zacznijmy od danych. Z serwisu nationmaster.com pobrałem dane dotyczące średniego wieku urodzenia pierwszego dziecka (oczywiście średnia liczona tylko dla kobiet, które urodziły jakieś dziecko) oraz rocznej liczby narodzin na 1000 mieszkańców.

1
2
3
4
5
6
7
8
head(dane)
#                  p.dziecko urodzin.na.1000
#  Austria              26.3            9.50
#  Czech Republic       24.9            9.99
#  Finland              27.4           11.00
#  Hungary              25.1            9.60
#  Iceland              25.5           14.20
#  Ireland              27.8           15.30

Poniższy kod tworzy wykres, dodaje do każdego punktu adnotacje i zapisuje wynik do pliku demografiaInteraktywna.svg.

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# argument funkcji svgPlot to kod programu R generujący wykres, tutaj wykres punktowy
doc <- svgPlot({
  plot(urodzin.na.1000 ~ p.dziecko, dane, pch=19, las=1, 
      xlab="Sredni wiek urodzenia pierwszego dziecka",
      ylab="liczba urodzen na rok na 1000 mieszkancow")
  points(dane[11,1], dane[11,2], cex=1.5, col="red3", pch=19)
  axis(3)
  axis(4,las=1)
})
# obiekt 'doc' opisuje XMLową strukturę pliku SVG, używając funkcji getPlotPoints() 
# można z tej struktury wyciągnąć wierzchołki odpowiadające punktom na wykresie.
punkty <- getPlotPoints(doc)[[1]]
# przygotowujemy wektor nazw dla punktów
nazwy <- paste(rownames(dane), ", sredni wiek urodzenia pierwszego dziecka: ",
      dane[,1], ", roczna liczba porodow na 1000 mieszkancow: ", dane[,2],
      sep="")
# dodajemy etykietki punktów do punktów
addToolTips(punkty, nazwy)
# zapisujemy cały wykres do pliku demografiaInteraktywna.svg
saveXML(doc,"demografiaInteraktywna.svg")

Wynik powyższego kodu można oglądać poniżej.
Czerwony punkt to Polska. Dla wszystkich punktów można odsłonić nazwę kraju po po najechaniu na punkt kursorem myszki. Starsze przeglądarki mogą nie radzić sobie z przetwarzaniem plików SVG. W chromie aby zobaczyć rysunek trzeba odświeżyć stronę, ale nosze wersje Firefox, IE i Mozilla radzą sobie bez problemu.

Polska, Węgry, Czechy i Słowakia tworzą grupę krajów o najniższej liczbie porodów i najniższym średnim wieku urodzenia dziecka.

Tags: , , , ,

Comments are closed.