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:
dataframe
,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))
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"
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")
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)
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`.
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`.
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.