Zastosowanie pakietu R w statystyce medycznej

LABORATORIUM 4

Podstawy ggplot2

ggplot2 jest bibliotek±, pozwalaj±c± na tworzenie eleganckich grafik i wykresów. Jest szczególnie przydatna w przypadku analizy danych wielowymiarowych oraz jako pomoc do data mining. Bibliotekê uruchamiamy komend± library(ggplot2) (w przypadku braku, nale¿y zainstalowaæ j± u¿ywaj±c komendy install.packages("ggplot2")).

# Przyk³ad 4.1
library(ggplot2)
## Registered S3 methods overwritten by 'ggplot2':
##   method         from 
##   [.quosures     rlang
##   c.quosures     rlang
##   print.quosures rlang

Podstawowe dwie cechy pakietu:

Bazow± funkcj±, od której musimy zacz±c tworzenie ka¿dego wykresu jest ggplot(). Jako jej argument mo¿na podaæ od razu zbiór danych, który bêdziemy wykorzystywaæ, mapuj±c cechy poprzez funkcjê aes() (aesthethics - w³a¶ciwo¶ci). Samo wywo³anie funkcji ggplot(), nawet z okre¶leniem mapowania, nie da ¿adnego sensownego efektu.

# Przyk³ad 4.2
df1 <- data.frame(a = 1:10, b = (1:10) + runif(10,-2,2), c = 1:10)
df1
##     a          b  c
## 1   1 -0.9870218  1
## 2   2  1.1479201  2
## 3   3  4.4304213  3
## 4   4  3.6239983  4
## 5   5  6.6601412  5
## 6   6  4.4365366  6
## 7   7  7.2077196  7
## 8   8  8.7451282  8
## 9   9  7.3172490  9
## 10 10 11.8182255 10
ggplot(df1, aes(x = a, y = b))

Dopiero ustalenie odpowiedniej warstwy (w tym przypadku chcemy narysowæ punkty za pomoc± geometrii geom_point()) umo¿liwia otrzymanie wykresu.

# Przyk³ad 4.3
ggplot(df1, aes(x = a, y = b)) + geom_point()

Nale¿y przy tym zwróciæ uwagê, ¿e ten sam wykres mo¿e zostaæ otrzymany za pomoc± ró¿nych operacji

# Przyk³ad 4.4
ggplot(df1, aes(x = a, y = b)) + geom_point()
ggplot(df1) + geom_point(aes(x = a, y = b))
ggplot() + geom_point(data = df1, aes(x = a, y = b))
ggplot(df1, aes(x = a)) + geom_point(aes(y = b))

Poza tym mo¿na (a nawet jest to dosyæ polecane dla czysto¶ci kodu) umie¶ciæ bazow± warstwê w zmiennej i nastêpnie dodawaæ do niej kolejne warstwy.

# Przyk³ad 4.5
g <- ggplot(df1, aes(x = a, y = b))
g + geom_point()

Istnieje równie¿ opcja "podmiany" ¼ród³owego zbioru danych "w locie" za pomoc± operatora %+%

# Przyk³ad 4.6
df2 <- data.frame(a = 1:10, b = (1:10)+runif(10,-2,2), c = 1:10)
g <- ggplot(df1)
g + geom_point(aes(x = a, y = b))

g %+% df2 + geom_point(aes(x = a, y = b))

Modyfikowanie w³a¶ciwo¶ci

Operuj±c cechami size="", shape="", colour="" oraz fill="", a tak¿e dodaj±c kolejne warstwy, otrzymujemy po¿±dany efekt.

# Przyk³ad 4.7
g <- ggplot(df1, aes(x = a))
g + geom_point(aes(y=b), size=4, shape=22, colour="red") + 
  geom_point(aes(y = c), size=3, shape=21, fill="blue")

g + geom_point(aes(y=b), size=4, shape=22, colour="red", fill="blue") + 
  geom_line(aes(y = c), size=1.2, linetype=3, colour="darkgreen")

ggplot2 umo¿liwia automatyczne dodanie dopasowania liniowego do serii danych za pomoc± warstwy geom_smooth().

# Przyk³ad 4.8
g <- ggplot(df1, aes(x = a))
g + geom_smooth(aes(y = b), method="lm", size=1.2, colour="red") + 
  geom_point(aes(y = b), shape=21, size=3, fill="black")

Aby uzyskaæ dostêp do wszystkich danych, z których zbudowany jest wykres, nale¿y wywo³aæ funkcjê ggplot_build() podaj±c w niej jako argument zapisany do zmiennej wykres. Wynikiem funkcji jest lista zawieraj±ca ramki danych dla wszystkich warstw wykresu oraz wszystkie informacje dotycz±ce konfiguracji graficznej wykresu.

# Przyk³ad 4.8b
p <- ggplot(df1, aes(x = a)) + geom_smooth(aes(y = b), method="lm", size=1.2, colour="red") + 
  geom_point(aes(y = b), shape=21, size=3, fill="black")
build <- ggplot_build(p)
build
## $data
## $data[[1]]
##            x          y        ymin      ymax        se PANEL group colour
## 1   1.000000  0.2982057 -1.68243237  2.278844 0.8589048     1    -1    red
## 2   1.113924  0.4283786 -1.51676476  2.373522 0.8435125     1    -1    red
## 3   1.227848  0.5585514 -1.35137288  2.468476 0.8282397     1    -1    red
## 4   1.341772  0.6887242 -1.18627227  2.563721 0.8130933     1    -1    red
## 5   1.455696  0.8188970 -1.02147952  2.659273 0.7980803     1    -1    red
## 6   1.569620  0.9490698 -0.85701233  2.755152 0.7832085     1    -1    red
## 7   1.683544  1.0792426 -0.69288959  2.851375 0.7684861     1    -1    red
## 8   1.797468  1.2094154 -0.52913149  2.947962 0.7539219     1    -1    red
## 9   1.911392  1.3395882 -0.36575958  3.044936 0.7395250     1    -1    red
## 10  2.025316  1.4697610 -0.20279684  3.142319 0.7253057     1    -1    red
## 11  2.139241  1.5999339 -0.04026783  3.240136 0.7112744     1    -1    red
## 12  2.253165  1.7301067  0.12180129  3.338412 0.6974425     1    -1    red
## 13  2.367089  1.8602795  0.28338261  3.437176 0.6838222     1    -1    red
## 14  2.481013  1.9904523  0.44444639  3.536458 0.6704263     1    -1    red
## 15  2.594937  2.1206251  0.60496099  3.636289 0.6572686     1    -1    red
## 16  2.708861  2.2507979  0.76489277  3.736703 0.6443636     1    -1    red
## 17  2.822785  2.3809707  0.92420601  3.837735 0.6317268     1    -1    red
## 18  2.936709  2.5111435  1.08286285  3.939424 0.6193747     1    -1    red
## 19  3.050633  2.6413164  1.24082324  4.041809 0.6073246     1    -1    red
## 20  3.164557  2.7714892  1.39804491  4.144933 0.5955949     1    -1    red
## 21  3.278481  2.9016620  1.55448335  4.248841 0.5842048     1    -1    red
## 22  3.392405  3.0318348  1.71009189  4.353578 0.5731746     1    -1    red
## 23  3.506329  3.1620076  1.86482168  4.459194 0.5625254     1    -1    red
## 24  3.620253  3.2921804  2.01862191  4.565739 0.5522794     1    -1    red
## 25  3.734177  3.4223532  2.17143990  4.673267 0.5424593     1    -1    red
## 26  3.848101  3.5525260  2.32322136  4.781831 0.5330887     1    -1    red
## 27  3.962025  3.6826988  2.47391071  4.891487 0.5241917     1    -1    red
## 28  4.075949  3.8128717  2.62345143  5.002292 0.5157928     1    -1    red
## 29  4.189873  3.9430445  2.77178653  5.114302 0.5079167     1    -1    red
## 30  4.303797  4.0732173  2.91885912  5.227575 0.5005881     1    -1    red
## 31  4.417722  4.2033901  3.06461297  5.342167 0.4938313     1    -1    red
## 32  4.531646  4.3335629  3.20899328  5.458133 0.4876703     1    -1    red
## 33  4.645570  4.4637357  3.35194739  5.575524 0.4821276     1    -1    red
## 34  4.759494  4.5939085  3.49342560  5.694391 0.4772250     1    -1    red
## 35  4.873418  4.7240813  3.63338202  5.814781 0.4729824     1    -1    red
## 36  4.987342  4.8542542  3.77177539  5.936733 0.4694175     1    -1    red
## 37  5.101266  4.9844270  3.90856986  6.060284 0.4665460     1    -1    red
## 38  5.215190  5.1145998  4.04373579  6.185464 0.4643808     1    -1    red
## 39  5.329114  5.2447726  4.17725032  6.312295 0.4629316     1    -1    red
## 40  5.443038  5.3749454  4.30909792  6.440793 0.4622054     1    -1    red
## 41  5.556962  5.5051182  4.43927074  6.570966 0.4622054     1    -1    red
## 42  5.670886  5.6352910  4.56776876  6.702813 0.4629316     1    -1    red
## 43  5.784810  5.7654638  4.69459985  6.836328 0.4643808     1    -1    red
## 44  5.898734  5.8956366  4.81977954  6.971494 0.4665460     1    -1    red
## 45  6.012658  6.0258095  4.94333069  7.108288 0.4694175     1    -1    red
## 46  6.126582  6.1559823  5.06528295  7.246682 0.4729824     1    -1    red
## 47  6.240506  6.2861551  5.18567216  7.386638 0.4772250     1    -1    red
## 48  6.354430  6.4163279  5.30453957  7.528116 0.4821276     1    -1    red
## 49  6.468354  6.5465007  5.42193109  7.671070 0.4876703     1    -1    red
## 50  6.582278  6.6766735  5.53789640  7.815451 0.4938313     1    -1    red
## 51  6.696203  6.8068463  5.65248817  7.961204 0.5005881     1    -1    red
## 52  6.810127  6.9370191  5.76576120  8.108277 0.5079167     1    -1    red
## 53  6.924051  7.0671920  5.87777172  8.256612 0.5157928     1    -1    red
## 54  7.037975  7.1973648  5.98857663  8.406153 0.5241917     1    -1    red
## 55  7.151899  7.3275376  6.09823290  8.556842 0.5330887     1    -1    red
## 56  7.265823  7.4577104  6.20679707  8.708624 0.5424593     1    -1    red
## 57  7.379747  7.5878832  6.31432470  8.861442 0.5522794     1    -1    red
## 58  7.493671  7.7180560  6.42087010  9.015242 0.5625254     1    -1    red
## 59  7.607595  7.8482288  6.52648592  9.169972 0.5731746     1    -1    red
## 60  7.721519  7.9784016  6.63122302  9.325580 0.5842048     1    -1    red
## 61  7.835443  8.1085745  6.73513019  9.482019 0.5955949     1    -1    red
## 62  7.949367  8.2387473  6.83825415  9.639240 0.6073246     1    -1    red
## 63  8.063291  8.3689201  6.94063938  9.797201 0.6193747     1    -1    red
## 64  8.177215  8.4990929  7.04232817  9.955858 0.6317268     1    -1    red
## 65  8.291139  8.6292657  7.14336055 10.115171 0.6443636     1    -1    red
## 66  8.405063  8.7594385  7.24377439 10.275103 0.6572686     1    -1    red
## 67  8.518987  8.8896113  7.34360542 10.435617 0.6704263     1    -1    red
## 68  8.632911  9.0197841  7.44288726 10.596681 0.6838222     1    -1    red
## 69  8.746835  9.1499569  7.54165157 10.758262 0.6974425     1    -1    red
## 70  8.860759  9.2801298  7.63992807 10.920331 0.7112744     1    -1    red
## 71  8.974684  9.4103026  7.73774468 11.082860 0.7253057     1    -1    red
## 72  9.088608  9.5404754  7.83512757 11.245823 0.7395250     1    -1    red
## 73  9.202532  9.6706482  7.93210127 11.409195 0.7539219     1    -1    red
## 74  9.316456  9.8008210  8.02868880 11.572953 0.7684861     1    -1    red
## 75  9.430380  9.9309938  8.12491169 11.737076 0.7832085     1    -1    red
## 76  9.544304 10.0611666  8.22079012 11.901543 0.7980803     1    -1    red
## 77  9.658228 10.1913394  8.31634299 12.066336 0.8130933     1    -1    red
## 78  9.772152 10.3215123  8.41158801 12.231436 0.8282397     1    -1    red
## 79  9.886076 10.4516851  8.50654175 12.396828 0.8435125     1    -1    red
## 80 10.000000 10.5818579  8.60121976 12.562496 0.8589048     1    -1    red
##      fill size linetype weight alpha
## 1  grey60  1.2        1      1   0.4
## 2  grey60  1.2        1      1   0.4
## 3  grey60  1.2        1      1   0.4
## 4  grey60  1.2        1      1   0.4
## 5  grey60  1.2        1      1   0.4
## 6  grey60  1.2        1      1   0.4
## 7  grey60  1.2        1      1   0.4
## 8  grey60  1.2        1      1   0.4
## 9  grey60  1.2        1      1   0.4
## 10 grey60  1.2        1      1   0.4
## 11 grey60  1.2        1      1   0.4
## 12 grey60  1.2        1      1   0.4
## 13 grey60  1.2        1      1   0.4
## 14 grey60  1.2        1      1   0.4
## 15 grey60  1.2        1      1   0.4
## 16 grey60  1.2        1      1   0.4
## 17 grey60  1.2        1      1   0.4
## 18 grey60  1.2        1      1   0.4
## 19 grey60  1.2        1      1   0.4
## 20 grey60  1.2        1      1   0.4
## 21 grey60  1.2        1      1   0.4
## 22 grey60  1.2        1      1   0.4
## 23 grey60  1.2        1      1   0.4
## 24 grey60  1.2        1      1   0.4
## 25 grey60  1.2        1      1   0.4
## 26 grey60  1.2        1      1   0.4
## 27 grey60  1.2        1      1   0.4
## 28 grey60  1.2        1      1   0.4
## 29 grey60  1.2        1      1   0.4
## 30 grey60  1.2        1      1   0.4
## 31 grey60  1.2        1      1   0.4
## 32 grey60  1.2        1      1   0.4
## 33 grey60  1.2        1      1   0.4
## 34 grey60  1.2        1      1   0.4
## 35 grey60  1.2        1      1   0.4
## 36 grey60  1.2        1      1   0.4
## 37 grey60  1.2        1      1   0.4
## 38 grey60  1.2        1      1   0.4
## 39 grey60  1.2        1      1   0.4
## 40 grey60  1.2        1      1   0.4
## 41 grey60  1.2        1      1   0.4
## 42 grey60  1.2        1      1   0.4
## 43 grey60  1.2        1      1   0.4
## 44 grey60  1.2        1      1   0.4
## 45 grey60  1.2        1      1   0.4
## 46 grey60  1.2        1      1   0.4
## 47 grey60  1.2        1      1   0.4
## 48 grey60  1.2        1      1   0.4
## 49 grey60  1.2        1      1   0.4
## 50 grey60  1.2        1      1   0.4
## 51 grey60  1.2        1      1   0.4
## 52 grey60  1.2        1      1   0.4
## 53 grey60  1.2        1      1   0.4
## 54 grey60  1.2        1      1   0.4
## 55 grey60  1.2        1      1   0.4
## 56 grey60  1.2        1      1   0.4
## 57 grey60  1.2        1      1   0.4
## 58 grey60  1.2        1      1   0.4
## 59 grey60  1.2        1      1   0.4
## 60 grey60  1.2        1      1   0.4
## 61 grey60  1.2        1      1   0.4
## 62 grey60  1.2        1      1   0.4
## 63 grey60  1.2        1      1   0.4
## 64 grey60  1.2        1      1   0.4
## 65 grey60  1.2        1      1   0.4
## 66 grey60  1.2        1      1   0.4
## 67 grey60  1.2        1      1   0.4
## 68 grey60  1.2        1      1   0.4
## 69 grey60  1.2        1      1   0.4
## 70 grey60  1.2        1      1   0.4
## 71 grey60  1.2        1      1   0.4
## 72 grey60  1.2        1      1   0.4
## 73 grey60  1.2        1      1   0.4
## 74 grey60  1.2        1      1   0.4
## 75 grey60  1.2        1      1   0.4
## 76 grey60  1.2        1      1   0.4
## 77 grey60  1.2        1      1   0.4
## 78 grey60  1.2        1      1   0.4
## 79 grey60  1.2        1      1   0.4
## 80 grey60  1.2        1      1   0.4
## 
## $data[[2]]
##             y  x PANEL group shape colour size  fill alpha stroke
## 1  -0.9870218  1     1    -1    21  black    3 black    NA    0.5
## 2   1.1479201  2     1    -1    21  black    3 black    NA    0.5
## 3   4.4304213  3     1    -1    21  black    3 black    NA    0.5
## 4   3.6239983  4     1    -1    21  black    3 black    NA    0.5
## 5   6.6601412  5     1    -1    21  black    3 black    NA    0.5
## 6   4.4365366  6     1    -1    21  black    3 black    NA    0.5
## 7   7.2077196  7     1    -1    21  black    3 black    NA    0.5
## 8   8.7451282  8     1    -1    21  black    3 black    NA    0.5
## 9   7.3172490  9     1    -1    21  black    3 black    NA    0.5
## 10 11.8182255 10     1    -1    21  black    3 black    NA    0.5
## 
## 
## $layout
## <ggproto object: Class Layout, gg>
##     coord: <ggproto object: Class CoordCartesian, Coord, gg>
##         aspect: function
##         backtransform_range: function
##         clip: on
##         default: TRUE
##         distance: function
##         expand: TRUE
##         is_free: function
##         is_linear: function
##         labels: function
##         limits: list
##         modify_scales: function
##         range: function
##         render_axis_h: function
##         render_axis_v: function
##         render_bg: function
##         render_fg: function
##         setup_data: function
##         setup_layout: function
##         setup_panel_params: function
##         setup_params: function
##         transform: function
##         super:  <ggproto object: Class CoordCartesian, Coord, gg>
##     coord_params: list
##     facet: <ggproto object: Class FacetNull, Facet, gg>
##         compute_layout: function
##         draw_back: function
##         draw_front: function
##         draw_labels: function
##         draw_panels: function
##         finish_data: function
##         init_scales: function
##         map_data: function
##         params: list
##         setup_data: function
##         setup_params: function
##         shrink: TRUE
##         train_scales: function
##         vars: function
##         super:  <ggproto object: Class FacetNull, Facet, gg>
##     facet_params: list
##     finish_data: function
##     get_scales: function
##     layout: data.frame
##     map_position: function
##     panel_params: list
##     panel_scales_x: list
##     panel_scales_y: list
##     render: function
##     render_labels: function
##     reset_scales: function
##     setup: function
##     setup_panel_params: function
##     train_position: function
##     xlabel: function
##     ylabel: function
##     super:  <ggproto object: Class Layout, gg>
## 
## $plot

## 
## attr(,"class")
## [1] "ggplot_built"

Grupowanie

Umieszczenie wszystkich danych w jednej kolumnie oraz stworzenie dodatkowej (dodatkowych) kolumn, okre¶laj±cych serie daje mo¿liwo¶æ skorzystania z automatycznego przypisywania cech.

# Przyk³ad 4.9
df2 <- data.frame(a = c(df1$a, df1$a), b = c(df1$b, df1$c), n = sample(20), ser = c(rep("S1",10), rep("S2", 10)))
df2
##     a          b  n ser
## 1   1 -0.9870218 10  S1
## 2   2  1.1479201 11  S1
## 3   3  4.4304213 18  S1
## 4   4  3.6239983 20  S1
## 5   5  6.6601412  3  S1
## 6   6  4.4365366 17  S1
## 7   7  7.2077196 19  S1
## 8   8  8.7451282 16  S1
## 9   9  7.3172490 15  S1
## 10 10 11.8182255  1  S1
## 11  1  1.0000000  9  S2
## 12  2  2.0000000  8  S2
## 13  3  3.0000000  7  S2
## 14  4  4.0000000 14  S2
## 15  5  5.0000000  5  S2
## 16  6  6.0000000  4  S2
## 17  7  7.0000000  6  S2
## 18  8  8.0000000  2  S2
## 19  9  9.0000000 12  S2
## 20 10 10.0000000 13  S2
g <- ggplot(df2)
g + geom_point(aes(x = a, y = b, fill=ser), size=3, shape=21)

g + geom_point(aes(x = a, y = b, shape=ser), size=3, colour="blue")

Bardzo u¿ytecznym zabiegiem jest takze mapowanie rozmiaru, szczególnie, gdy ma on okre¶laæ np. liczbê obserwacji wchodz±cych do danego punktu.

# Przyk³ad 4.10

g + geom_point(aes(x = a, y = b, fill=ser, size=n), shape=21)

Nale¿y przy tym zwróciæ uwagê, czy odnosimy siê do wszystkich serii danych na raz, czy te¿ do ka¿dej oddzielnie (polecenie group="").

# Przyk³ad 4.11

# Tworzenie danych
x1 <- 1:10; x2 <- 5:15; x3 <- 10:20
y1 <- x1 + runif(10,-2,2)
y2 <- x2 + runif(11,-3,3)
y3 <- x3 + runif(11,-2,2)
df3 <- data.frame(x = c(x1, x2, x3), y = c(y1, y2, y3), ser = c(rep("S1", 10), rep("S2", 11), rep("S3", 11)))
df3
##     x          y ser
## 1   1 -0.5200246  S1
## 2   2  3.5777499  S1
## 3   3  2.0527678  S1
## 4   4  3.4166818  S1
## 5   5  3.2321258  S1
## 6   6  4.1980655  S1
## 7   7  8.6384229  S1
## 8   8  9.5966864  S1
## 9   9  7.0809517  S1
## 10 10 10.5758828  S1
## 11  5  6.6914512  S2
## 12  6  5.4219628  S2
## 13  7  6.3896181  S2
## 14  8  8.3355385  S2
## 15  9  6.8623101  S2
## 16 10 11.6452943  S2
## 17 11 12.9447363  S2
## 18 12 11.4993919  S2
## 19 13 10.3735620  S2
## 20 14 12.0778147  S2
## 21 15 16.0910962  S2
## 22 10 10.3222179  S3
## 23 11  9.5253888  S3
## 24 12 12.8685216  S3
## 25 13 13.3961451  S3
## 26 14 15.0866294  S3
## 27 15 13.8994541  S3
## 28 16 17.1923207  S3
## 29 17 17.1046473  S3
## 30 18 18.4273932  S3
## 31 19 18.0953693  S3
## 32 20 18.2093261  S3
g <- ggplot(df3)

p <- geom_point(aes(x = x, y = y, fill = ser), size=3, shape=21)
g + p

# Dopasowanie do wszystkich punktów
g + p + geom_smooth(aes(x = x, y = y), method = "lm")

# Dopasowanie do poszczegolnych serii
g + p + geom_smooth(aes(x = x, y = y, group = ser, colour=ser), method = "lm")

Przezroczysto¶æ

Bardzo wygodnym narzêdziem jest opcja alpha="" ustawiaj±ca przezroczysto¶æ obiektów. Jest to szczególnie u¿yteczne w przypadku du¿ej ilo¶ci danych, gdy punkty nak³adaj± siê na siebie.

# Przyk³ad 4.12

x <- rnorm(10000, 0, 1); y <- rnorm(10000, 0, 1)
df.norm <- data.frame(x = x, y = y)
g <- ggplot(df.norm)

# Bez przezroczystosci
g + geom_point(aes(x = x, y = y), shape = 21)

# Z przezroczystoscia
g + geom_point(aes(x = x, y = y), shape = 21, alpha = 0.25)

# Przyk³ad 4.13

# Bez przezroczystosci
df.norm <- data.frame(x = rnorm(10000,0,1), y=rnorm(10000,0,1))
df.norm1 <- data.frame(x = rnorm(10000,2,1), y=rnorm(10000,-2,1))
df.norm2 <- data.frame(x = rnorm(10000,-2,1), y=rnorm(10000,-2,1))
g <- ggplot(df.norm)

g + geom_point(aes(x = x, y = y), shape=21, fill="blue", colour="blue") + 
geom_point(data = df.norm1, aes(x = x,y = y), shape=21, fill = "darkgreen", colour = "darkgreen") + 
geom_point(data = df.norm2, aes(x = x,y = y), shape=21, fill = "red", colour = "red")

# Z przezroczystoscia

g + geom_point(aes(x = x, y = y), shape=21, fill="blue", colour="blue", alpha=0.1) + 
geom_point(data=df.norm1, aes(x=x,y=y), shape=21, fill="darkgreen", colour="darkgreen", alpha=0.1) + 
geom_point(data=df.norm2, aes(x=x,y=y),shape=21,fill="red",colour="red", alpha=0.1)

Histogramy

Za pomoc± geometrii geom_histogram() mo¿na utworzyæ histogram danej obserwacji. W poni¿szym przyk³adzie najpierw w zmiennej typu data frame utworzymy kilka serii danych, a nastêpnie zaczniemy od wizualizacji jedynie dwóch z nich.

# Przyk³ad 4.14

N1 <- 10000
N2 <- 5000
N3 <- 20000

sigma1 <- 1
sigma2 <- 0.5

mu <- 0

x1 <- rnorm(N1, mu, sigma1)
x2 <- rnorm(N2, mu, sigma1)
x3 <- rnorm(N3, mu, sigma1)
x4 <- rnorm(N1, mu, sigma2)
x5 <- rnorm(N2, mu, sigma2)
x6 <- rnorm(N3, mu, sigma2)

label.size <- c(rep("Size 1", N1), rep("Size 2", N2), rep("Size 3", N3))
label.par <- c(rep("Par 1", N1 + N2 + N3), rep("Par 2", N1 + N2 + N3))

df <- data.frame(x = c(x1, x2, x3, x4, x5, x6), size = c(label.size, label.size), par = label.par)

g1 <- ggplot(data = df[df$size == "Size 1",])
g1 + geom_histogram(aes(x = x, fill = par, colour = par))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Za pomoc± opcji position="" mo¿na sterowaæ wygladem histogramów - domy¶lnie position="stack" ustawia jeden s³upek na drugim, position="fill" normalizuje sumê do jedynki, position="dodge" ustawia jeden obok drugiego. Opcja position="identity" przes³ania jedn± serie drug±, wiêc przydatne jest u¿ycie przezroczysto¶ci.

# Przyk³ad 4.15

g1 + geom_histogram(aes(x = x, fill = par, colour = par), position="identity", alpha=0.3)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Aby zamiast liczby zliczeñ uzyskaæ gêsto¶æ prawdopodobieñstwa mo¿na skorzystaæ albo z geometrii geom_density() albo tez z opcji ..density.., podanej po zmiennej wewn±trz geometrii geom_histrogram(...). Je¶li dodatkowo potrzebujemy wykre¶liæ pewn± funkcjê (np. gêsto¶æ prawdopodobieñstwa rozk³adu normalnego), korzystamy wtedy z funkcji stat_function(). Podajemy w niej nazwê funkcji (fun=...) oraz jej parametry za pomoc± listy (args = list(...)).

# Przyk³ad 4.16

g1 + geom_density(aes(x = x, fill = par), colour="black", alpha=0.3)

g1 + geom_histogram(aes(x = x,..density.., fill = par, colour = par), position="identity", alpha=0.3) +
stat_function(fun = dnorm, args = list(mean = 0, sd = 0.5))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Warunkowanie

W naszym przypadku mamy do czynienia z trzema ró¿nymi rozmiarami próbek oraz dwiema warto¶ciami parametru. Wygodnie jest wykorzystaæ mechanizm warunkowania za pomoc± funkcji facet_grid().

# Przyk³ad 4.17

g2 <- ggplot(data = df)
g2 + geom_histogram(aes(x = x,..density.., fill = size, colour = size), alpha=0.6) + facet_grid(size ~ par)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


Zadanie punktowane

Przedstaw zbiór danych mtcars wed³ug poni¿szego obrazka. Rozmiar punktów jest propocjonalny do zu¿ycia paliwa. Przydatnym jest utworzenie dodatkowej kolumny typu factor lub character aby wykonaæ grupowanie ze wzglêdu na skrzyniê biegów.