├── Data └── Dreissena.txt ├── README.md └── Scripts ├── Chapter_1 └── Chapter_1.R ├── Chapter_2 ├── Section_2_2.R ├── Section_2_3.R └── Section_2_4.R ├── Chapter_3 └── Chapter_3.R ├── Chapter_4 ├── Section_4_10.R ├── Section_4_2.R ├── Section_4_3.R ├── Section_4_4.R ├── Section_4_5.R ├── Section_4_6.R ├── Section_4_7.R ├── Section_4_8.R └── Section_4_9.R ├── Chapter_5 ├── Section_5_2.R ├── Section_5_3.R ├── Section_5_4.R └── Section_5_5.R ├── Chapter_6 ├── Section_6_1.R ├── Section_6_2.R └── Section_6_3.R ├── Chapter_7 ├── Section_7_2.R └── Section_7_3.R └── Chapter_8 ├── Section_8_1.R └── Section_8_2.R /Data/Dreissena.txt: -------------------------------------------------------------------------------- 1 | Month Day Lake Site Length Infection 2 | May 1 Batorino S3 14.9 36 3 | May 1 Batorino S3 14 30 4 | May 1 Batorino S3 13 331 5 | May 1 Batorino S3 14 110 6 | May 1 Batorino S3 12 4 7 | May 1 Batorino S3 14 171 8 | May 1 Batorino S3 12 31 9 | May 1 Batorino S3 19 887 10 | May 1 Batorino S3 16.5 525 11 | May 1 Batorino S3 18 497 12 | May 1 Batorino S3 19 56 13 | May 1 Batorino S3 19 1599 14 | May 1 Batorino S3 19 692 15 | May 1 Batorino S3 23 86 16 | May 1 Batorino S3 22 1768 17 | May 1 Batorino S3 22 183 18 | May 1 Batorino S3 22 1209 19 | May 1 Batorino S2 11.5 53 20 | May 1 Batorino S2 13 21 21 | May 1 Batorino S2 11.5 70 22 | May 1 Batorino S2 11.5 79 23 | May 1 Batorino S2 18 55 24 | May 1 Batorino S2 18 353 25 | May 1 Batorino S2 19 261 26 | May 1 Batorino S2 16 131 27 | May 1 Batorino S2 19 69 28 | May 1 Batorino S2 17.5 280 29 | May 1 Batorino S2 18.5 17 30 | May 1 Batorino S2 21 32 31 | May 1 Batorino S2 21 118 32 | May 1 Batorino S2 21 389 33 | May 1 Batorino S1 13 182 34 | May 1 Batorino S1 14 36 35 | May 1 Batorino S1 12 320 36 | May 1 Batorino S1 14 235 37 | May 1 Batorino S1 14 109 38 | May 1 Batorino S1 13 121 39 | May 1 Batorino S1 14 119 40 | May 1 Batorino S1 17 217 41 | May 1 Batorino S1 15.5 135 42 | May 1 Batorino S1 15 215 43 | May 1 Batorino S1 18.5 241 44 | May 1 Batorino S1 17 447 45 | May 1 Batorino S1 16 766 46 | May 1 Batorino S1 16 950 47 | July 62 Batorino S3 15.5 1400 48 | July 62 Batorino S3 17 1086 49 | July 62 Batorino S3 16 925 50 | July 62 Batorino S3 17 2400 51 | July 62 Batorino S3 16 132 52 | July 62 Batorino S3 15 703 53 | July 62 Batorino S3 15 668 54 | July 62 Batorino S3 23 1716 55 | July 62 Batorino S3 22 1649 56 | July 62 Batorino S3 22.5 684 57 | July 62 Batorino S3 23 1418 58 | July 62 Batorino S3 22.5 1007 59 | July 62 Batorino S3 25 827 60 | July 62 Batorino S3 25 2551 61 | July 62 Batorino S2 18 809 62 | July 62 Batorino S2 16 891 63 | July 62 Batorino S2 15.5 473 64 | July 62 Batorino S2 17 1292 65 | July 62 Batorino S2 17.5 119 66 | July 62 Batorino S2 21 655 67 | July 62 Batorino S2 21 291 68 | July 62 Batorino S2 23 576 69 | July 62 Batorino S2 22.5 1845 70 | July 62 Batorino S2 21 25 71 | July 62 Batorino S2 21 1176 72 | July 62 Batorino S2 23 977 73 | July 62 Batorino S2 26 676 74 | July 62 Batorino S2 26.5 1303 75 | July 62 Batorino S1 14.5 327 76 | July 62 Batorino S1 14 230 77 | July 62 Batorino S1 19 659 78 | July 62 Batorino S1 19 1018 79 | July 62 Batorino S1 19 1235 80 | July 62 Batorino S1 17 121 81 | July 62 Batorino S1 15.5 789 82 | July 62 Batorino S1 16 2093 83 | July 62 Batorino S1 17 434 84 | July 62 Batorino S1 20 2658 85 | July 62 Batorino S1 21 948 86 | July 62 Batorino S1 22 2115 87 | September 109 Batorino S3 18 1397 88 | September 109 Batorino S3 16 1106 89 | September 109 Batorino S3 17.5 1103 90 | September 109 Batorino S3 17 499 91 | September 109 Batorino S3 16 1248 92 | September 109 Batorino S3 16 486 93 | September 109 Batorino S3 20.5 1666 94 | September 109 Batorino S3 21 510 95 | September 109 Batorino S3 21 2084 96 | September 109 Batorino S3 21.5 2897 97 | September 109 Batorino S3 23 782 98 | September 109 Batorino S3 22.5 505 99 | September 109 Batorino S3 23 972 100 | September 109 Batorino S3 26.5 1202 101 | September 109 Batorino S3 21 366 102 | September 109 Batorino S2 18 1951 103 | September 109 Batorino S2 18 1438 104 | September 109 Batorino S2 17.5 775 105 | September 109 Batorino S2 22 314 106 | September 109 Batorino S2 20.5 1479 107 | September 109 Batorino S2 21 457 108 | September 109 Batorino S2 20 648 109 | September 109 Batorino S2 21 356 110 | September 109 Batorino S2 20 170 111 | September 109 Batorino S2 20.5 1094 112 | September 109 Batorino S2 28 1368 113 | September 109 Batorino S2 25.5 721 114 | September 109 Batorino S2 25.5 711 115 | September 109 Batorino S2 25.5 233 116 | September 109 Batorino S1 17.5 2234 117 | September 109 Batorino S1 16 1613 118 | September 109 Batorino S1 12 1178 119 | September 109 Batorino S1 16 547 120 | September 109 Batorino S1 17 694 121 | September 109 Batorino S1 17.5 1090 122 | September 109 Batorino S1 17 347 123 | September 109 Batorino S1 21 1436 124 | September 109 Batorino S1 21 1069 125 | September 109 Batorino S1 23 580 126 | September 109 Batorino S1 22.5 1553 127 | September 109 Batorino S1 22.5 1274 128 | September 109 Batorino S1 21 856 129 | May 1 Myastro S5 4 0 130 | May 1 Myastro S5 4 6 131 | May 1 Myastro S5 9.5 40 132 | May 1 Myastro S5 7.5 81 133 | May 1 Myastro S5 8.5 87 134 | May 1 Myastro S5 9.5 54 135 | May 1 Myastro S5 7 37 136 | May 1 Myastro S5 8.5 41 137 | May 1 Myastro S5 7 9 138 | May 1 Myastro S5 13.5 211 139 | May 1 Myastro S5 12.5 243 140 | May 1 Myastro S5 13 349 141 | May 1 Myastro S5 13 52 142 | May 1 Myastro S5 18.5 97 143 | May 1 Myastro S5 17 36 144 | May 1 Myastro S5 16.5 106 145 | May 1 Myastro S5 18 446 146 | May 1 Myastro S5 21 446 147 | May 1 Myastro S6 14.5 745 148 | May 1 Myastro S6 14.5 56 149 | May 1 Myastro S6 13 31 150 | May 1 Myastro S6 14 492 151 | May 1 Myastro S6 13 169 152 | May 1 Myastro S6 13 48 153 | May 1 Myastro S6 17.5 634 154 | May 1 Myastro S6 17 412 155 | May 1 Myastro S6 18 245 156 | May 1 Myastro S6 17 276 157 | May 1 Myastro S6 17 442 158 | May 1 Myastro S6 17.5 53 159 | May 1 Myastro S6 17 95 160 | May 1 Myastro S6 21.5 1081 161 | May 1 Myastro S6 21.5 302 162 | May 1 Myastro S6 23.5 1105 163 | May 1 Myastro S6 21.5 507 164 | May 1 Myastro S6 22.5 754 165 | May 1 Myastro S6 24.5 920 166 | May 1 Myastro S6 26 1548 167 | May 1 Myastro S6 26 825 168 | May 1 Myastro S6 27 395 169 | May 1 Myastro S6 26 952 170 | May 1 Myastro S6 28 1180 171 | May 1 Myastro S6 28 913 172 | May 1 Myastro S4 12 20 173 | May 1 Myastro S4 13 85 174 | May 1 Myastro S4 18 113 175 | May 1 Myastro S4 17.5 356 176 | May 1 Myastro S4 18.5 298 177 | May 1 Myastro S4 17.5 476 178 | May 1 Myastro S4 16 147 179 | May 1 Myastro S4 17.5 85 180 | May 1 Myastro S4 17 164 181 | May 1 Myastro S4 20.5 291 182 | May 1 Myastro S4 21.5 516 183 | May 1 Myastro S4 24 7 184 | May 1 Myastro S4 27 1405 185 | May 1 Myastro S4 27 29 186 | May 1 Myastro S4 25 170 187 | July 59 Myastro S5 9 44 188 | July 59 Myastro S5 9 46 189 | July 59 Myastro S5 7 47 190 | July 59 Myastro S5 7 160 191 | July 59 Myastro S5 6 69 192 | July 59 Myastro S5 6 8 193 | July 59 Myastro S5 6 95 194 | July 59 Myastro S5 11 286 195 | July 59 Myastro S5 11 605 196 | July 59 Myastro S5 13 47 197 | July 59 Myastro S5 11.5 59 198 | July 59 Myastro S5 17 687 199 | July 59 Myastro S5 16.5 1389 200 | July 59 Myastro S5 17 1319 201 | July 59 Myastro S5 16 539 202 | July 59 Myastro S5 15 1379 203 | July 59 Myastro S5 16.5 1380 204 | July 59 Myastro S5 15 528 205 | July 59 Myastro S5 20 918 206 | July 59 Myastro S5 20.5 1483 207 | July 59 Myastro S6 7 14 208 | July 59 Myastro S6 13.5 1416 209 | July 59 Myastro S6 12 103 210 | July 59 Myastro S6 11 293 211 | July 59 Myastro S6 12 35 212 | July 59 Myastro S6 15 659 213 | July 59 Myastro S6 17 778 214 | July 59 Myastro S6 16 107 215 | July 59 Myastro S6 18 699 216 | July 59 Myastro S6 17 464 217 | July 59 Myastro S6 15.5 824 218 | July 59 Myastro S6 16 470 219 | July 59 Myastro S6 23.5 1645 220 | July 59 Myastro S6 21 985 221 | July 59 Myastro S6 24 6486 222 | July 59 Myastro S6 22 457 223 | July 59 Myastro S6 25 4210 224 | July 59 Myastro S6 26 1828 225 | July 59 Myastro S4 8 369 226 | July 59 Myastro S4 8 237 227 | July 59 Myastro S4 8 103 228 | July 59 Myastro S4 9 305 229 | July 59 Myastro S4 9 170 230 | July 59 Myastro S4 13 232 231 | July 59 Myastro S4 12 184 232 | July 59 Myastro S4 12 215 233 | July 59 Myastro S4 12 291 234 | July 59 Myastro S4 11 139 235 | July 59 Myastro S4 11 103 236 | July 59 Myastro S4 11.5 157 237 | July 59 Myastro S4 15 74 238 | July 59 Myastro S4 16 474 239 | July 59 Myastro S4 15 510 240 | July 59 Myastro S4 16 302 241 | July 59 Myastro S4 16.5 272 242 | July 59 Myastro S4 16 477 243 | July 59 Myastro S4 16.5 375 244 | July 59 Myastro S4 24 399 245 | July 59 Myastro S4 20 727 246 | July 59 Myastro S4 23 1237 247 | July 59 Myastro S4 27 2253 248 | July 59 Myastro S4 26 6599 249 | September 108 Myastro S5 8 209 250 | September 108 Myastro S5 7.5 176 251 | September 108 Myastro S5 13 252 252 | September 108 Myastro S5 13.5 318 253 | September 108 Myastro S5 12 284 254 | September 108 Myastro S5 13 543 255 | September 108 Myastro S5 14 911 256 | September 108 Myastro S5 12 432 257 | September 108 Myastro S5 14 375 258 | September 108 Myastro S5 18 4253 259 | September 108 Myastro S5 15 1004 260 | September 108 Myastro S5 16 1128 261 | September 108 Myastro S5 15 950 262 | September 108 Myastro S5 15 294 263 | September 108 Myastro S5 21.5 3947 264 | September 108 Myastro S5 23 1155 265 | September 108 Myastro S6 6.5 40 266 | September 108 Myastro S6 7 105 267 | September 108 Myastro S6 7 118 268 | September 108 Myastro S6 13.5 684 269 | September 108 Myastro S6 13 484 270 | September 108 Myastro S6 11 47 271 | September 108 Myastro S6 14 265 272 | September 108 Myastro S6 13 1357 273 | September 108 Myastro S6 18.5 1985 274 | September 108 Myastro S6 16 1349 275 | September 108 Myastro S6 17 241 276 | September 108 Myastro S6 17.5 2085 277 | September 108 Myastro S6 16.5 4610 278 | September 108 Myastro S6 16 761 279 | September 108 Myastro S6 16.5 1103 280 | September 108 Myastro S6 20.5 80 281 | September 108 Myastro S6 22.5 1440 282 | September 108 Myastro S6 26 10782 283 | September 108 Myastro S6 25 1054 284 | September 108 Myastro S6 26 1316 285 | September 108 Myastro S4 12 331 286 | September 108 Myastro S4 14 485 287 | September 108 Myastro S4 11 288 288 | September 108 Myastro S4 12 621 289 | September 108 Myastro S4 11 325 290 | September 108 Myastro S4 15 1466 291 | September 108 Myastro S4 17 1001 292 | September 108 Myastro S4 15 738 293 | September 108 Myastro S4 18.5 751 294 | September 108 Myastro S4 16 834 295 | September 108 Myastro S4 16 1089 296 | September 108 Myastro S4 17.5 1250 297 | September 108 Myastro S4 23 1293 298 | September 108 Myastro S4 21 1255 299 | September 108 Myastro S4 21 1022 300 | September 108 Myastro S4 21 1088 301 | September 108 Myastro S4 20.5 834 302 | September 108 Myastro S4 25 1119 303 | September 108 Myastro S4 28 165 304 | September 108 Myastro S4 26 1921 305 | September 108 Myastro S4 25 1407 306 | September 108 Myastro S4 31 4058 307 | September 108 Myastro S4 30 4523 308 | September 108 Myastro S4 30 1107 309 | May 0 Naroch S9 8 7 310 | May 0 Naroch S9 9.8 10 311 | May 0 Naroch S9 11 13 312 | May 0 Naroch S9 19 21 313 | May 0 Naroch S9 13 85 314 | May 0 Naroch S9 14 425 315 | May 0 Naroch S9 14 71 316 | May 0 Naroch S9 17 217 317 | May 0 Naroch S9 18 46 318 | May 0 Naroch S9 16.5 10 319 | May 0 Naroch S9 18.5 57 320 | May 0 Naroch S9 17 14 321 | May 0 Naroch S9 18 25 322 | May 0 Naroch S9 15.5 39 323 | May 0 Naroch S9 21 181 324 | May 0 Naroch S9 22.5 43 325 | May 0 Naroch S9 22 78 326 | May 0 Naroch S9 21 454 327 | May 0 Naroch S7 7 21 328 | May 0 Naroch S7 9 101 329 | May 0 Naroch S7 6 0 330 | May 0 Naroch S7 13 90 331 | May 0 Naroch S7 13 174 332 | May 0 Naroch S7 11.5 282 333 | May 0 Naroch S7 12.5 109 334 | May 0 Naroch S7 18.5 347 335 | May 0 Naroch S7 18 436 336 | May 0 Naroch S7 16.5 116 337 | May 0 Naroch S7 17 321 338 | May 0 Naroch S7 16 427 339 | May 0 Naroch S7 17 123 340 | May 0 Naroch S7 17.5 82 341 | May 0 Naroch S7 21 557 342 | May 0 Naroch S7 20.5 305 343 | May 0 Naroch S7 22 241 344 | May 0 Naroch S7 21.5 51 345 | May 0 Naroch S7 20.5 209 346 | May 0 Naroch S8 2 1 347 | May 0 Naroch S8 4 4 348 | May 0 Naroch S8 3 1 349 | May 0 Naroch S8 7 3 350 | May 0 Naroch S8 8 12 351 | May 0 Naroch S8 8.5 27 352 | May 0 Naroch S8 8 57 353 | May 0 Naroch S8 7 15 354 | May 0 Naroch S8 8 21 355 | May 0 Naroch S8 19 718 356 | May 0 Naroch S8 19 1733 357 | May 0 Naroch S8 17 3595 358 | May 0 Naroch S8 17.5 389 359 | May 0 Naroch S8 19 505 360 | May 0 Naroch S8 18.5 114 361 | May 0 Naroch S8 18 565 362 | May 0 Naroch S8 20 415 363 | May 0 Naroch S8 21.5 488 364 | July 58 Naroch S9 7 6 365 | July 58 Naroch S9 9 54 366 | July 58 Naroch S9 7 52 367 | July 58 Naroch S9 9 39 368 | July 58 Naroch S9 9 31 369 | July 58 Naroch S9 13.5 19 370 | July 58 Naroch S9 13 32 371 | July 58 Naroch S9 11 85 372 | July 58 Naroch S9 12 45 373 | July 58 Naroch S9 12 36 374 | July 58 Naroch S9 18 233 375 | July 58 Naroch S9 16 231 376 | July 58 Naroch S9 17 113 377 | July 58 Naroch S9 17.5 276 378 | July 58 Naroch S9 19 198 379 | July 58 Naroch S9 16.5 174 380 | July 58 Naroch S9 22.5 487 381 | July 58 Naroch S9 24 146 382 | July 58 Naroch S9 22 277 383 | July 58 Naroch S9 22 1086 384 | July 58 Naroch S9 23 1577 385 | July 58 Naroch S9 23 482 386 | July 58 Naroch S9 21 393 387 | July 58 Naroch S9 25 1179 388 | July 58 Naroch S9 25 805 389 | July 58 Naroch S7 3 1 390 | July 58 Naroch S7 3 0 391 | July 58 Naroch S7 7 6 392 | July 58 Naroch S7 6.5 23 393 | July 58 Naroch S7 8.5 57 394 | July 58 Naroch S7 9 49 395 | July 58 Naroch S7 9.5 9 396 | July 58 Naroch S7 8 81 397 | July 58 Naroch S7 7 42 398 | July 58 Naroch S7 12 28 399 | July 58 Naroch S7 14 628 400 | July 58 Naroch S7 14 421 401 | July 58 Naroch S7 14 475 402 | July 58 Naroch S7 13 297 403 | July 58 Naroch S7 12 453 404 | July 58 Naroch S7 17 892 405 | July 58 Naroch S7 18.5 786 406 | July 58 Naroch S7 15 430 407 | July 58 Naroch S7 17 647 408 | July 58 Naroch S7 19 209 409 | July 58 Naroch S7 19 210 410 | July 58 Naroch S7 17 990 411 | July 58 Naroch S7 23 1767 412 | July 58 Naroch S7 21.5 403 413 | July 58 Naroch S7 22.5 529 414 | July 58 Naroch S8 8 0 415 | July 58 Naroch S8 8 2 416 | July 58 Naroch S8 7.5 13 417 | July 58 Naroch S8 9 5 418 | July 58 Naroch S8 8 4 419 | July 58 Naroch S8 8 5 420 | July 58 Naroch S8 8 0 421 | July 58 Naroch S8 11.5 2 422 | July 58 Naroch S8 10 16 423 | July 58 Naroch S8 10.5 5 424 | July 58 Naroch S8 13 69 425 | July 58 Naroch S8 11 40 426 | July 58 Naroch S8 12 307 427 | July 58 Naroch S8 11 25 428 | July 58 Naroch S8 15 163 429 | July 58 Naroch S8 16.5 842 430 | July 58 Naroch S8 20.5 162 431 | July 58 Naroch S8 22.5 532 432 | September 108 Naroch S9 9 6 433 | September 108 Naroch S9 9 18 434 | September 108 Naroch S9 9 110 435 | September 108 Naroch S9 10 83 436 | September 108 Naroch S9 10 80 437 | September 108 Naroch S9 10 82 438 | September 108 Naroch S9 10 14 439 | September 108 Naroch S9 10 163 440 | September 108 Naroch S9 11 110 441 | September 108 Naroch S9 10 110 442 | September 108 Naroch S9 16 156 443 | September 108 Naroch S9 17 535 444 | September 108 Naroch S9 15.5 735 445 | September 108 Naroch S9 21 1760 446 | September 108 Naroch S9 22.5 224 447 | September 108 Naroch S9 22 364 448 | September 108 Naroch S7 8.5 170 449 | September 108 Naroch S7 8 37 450 | September 108 Naroch S7 12 23 451 | September 108 Naroch S7 11 177 452 | September 108 Naroch S7 11.5 163 453 | September 108 Naroch S7 12 333 454 | September 108 Naroch S7 17 396 455 | September 108 Naroch S7 15 1118 456 | September 108 Naroch S7 16 1223 457 | September 108 Naroch S7 15.5 542 458 | September 108 Naroch S7 18 987 459 | September 108 Naroch S7 18 464 460 | September 108 Naroch S7 15 232 461 | September 108 Naroch S7 21 909 462 | September 108 Naroch S7 21.5 2990 463 | September 108 Naroch S7 24 2862 464 | September 108 Naroch S8 12 163 465 | September 108 Naroch S8 11.5 130 466 | September 108 Naroch S8 12 215 467 | September 108 Naroch S8 11 91 468 | September 108 Naroch S8 13 117 469 | September 108 Naroch S8 12 266 470 | September 108 Naroch S8 14 182 471 | September 108 Naroch S8 18.5 539 472 | September 108 Naroch S8 16 497 473 | September 108 Naroch S8 17 217 474 | September 108 Naroch S8 18 820 475 | September 108 Naroch S8 21 1551 476 | September 108 Naroch S8 23.5 1144 477 | September 108 Naroch S8 21 388 478 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Приложения к книге "Визуализация данных с помощью ggplot2" 2 | 3 | В этом репозитории представлены скрипты с примерами кода из книги [Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2](http://dmkpress.com/catalog/computer/statistics/978-5-97060-470-0/), опубликованной издательством ["ДМК Пресс"](http://dmkpress.com/) (Москва). 4 | 5 | Репозиторий разбит на две директории: 6 | 7 | * в папке Scripts хранятся скрипты с примерами кода; 8 | * в папке Data хранится файл с данными, которые используются в большинстве примеров. 9 | 10 | С вопросами и предложениями по поводу содержания этого репозитория обращайтесь, пожалуйста, по [электронной почте](mailto:rtutorialsbook@gmail.com). 11 | -------------------------------------------------------------------------------- /Scripts/Chapter_1/Chapter_1.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из 1-й главы книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | 4 | 5 | # ------------------------------- Раздел 1.2 ----------------------------------- 6 | 7 | # Инсталляция ggplot2 (предполагает наличие Интернет-соединения): 8 | install.packages("ggplot2") 9 | 10 | # Загрузка пакета (в приведенных ниже примерах эта команда повторяться не будет): 11 | library(ggplot2) 12 | 13 | # ------------------------------- Раздел 1.4 ----------------------------------- 14 | 15 | # Загрузка таблицы с данными, используемыми в большинстве примеров: 16 | dreissena <- read.delim("http://files.figshare.com/1360878/Dreissena.txt") 17 | 18 | # Просмотр структуры таблицы dreissena: 19 | str(dreissena) 20 | 21 | # Преобразование переменной Month в фактор с упорядоченными уровнями: 22 | dreissena$Month <- factor(dreissena$Month, ordered = TRUE, 23 | levels = c("May", "July", "September")) 24 | 25 | -------------------------------------------------------------------------------- /Scripts/Chapter_2/Section_2_2.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 2.2 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 2.1 ---------------------------------- 9 | qplot(x = Length, y = Infection, data = dreissena) 10 | 11 | # ------------------------------- Рисунок 2.2 ---------------------------------- 12 | qplot(x = log(Length), 13 | y = log(Infection + 1), data = dreissena) 14 | # поскольку некоторые значения Infection равны 0, 15 | # логарифмирование выполнено для (Infection + 1) 16 | 17 | # ------------------------------- Рисунок 2.3 ---------------------------------- 18 | qplot(log(Length), log(Infection + 1), data = dreissena, colour = Month) 19 | qplot(log(Length), log(Infection + 1), data = dreissena, shape = Lake) 20 | 21 | # ------------------------------- Рисунок 2.4 ---------------------------------- 22 | qplot(Length, Infection, alpha = I(1/2), data = dreissena) 23 | qplot(Length, Infection, alpha = I(1/4), data = dreissena) 24 | qplot(Length, Infection, alpha = I(1/8), data = dreissena) 25 | 26 | # ------------------------------- Рисунок 2.5 ---------------------------------- 27 | qplot(log(Length), log(Infection + 1), data = dreissena, 28 | size = Day, alpha = I(0.25), colour = I("magenta")) 29 | 30 | -------------------------------------------------------------------------------- /Scripts/Chapter_2/Section_2_3.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 2.3 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 2.6 ---------------------------------- 9 | qplot(log(Length), log(Infection + 1), 10 | geom = c("point", "smooth"), 11 | data = dreissena) 12 | 13 | # ------------------------------- Рисунок 2.7 ---------------------------------- 14 | qplot(Lake, log(Infection + 1), data = dreissena, 15 | geom = "jitter", alpha = I(0.6)) 16 | 17 | # ------------------------------- Рисунок 2.8 ---------------------------------- 18 | qplot(Lake, log(Infection + 1), data = dreissena, 19 | geom = "jitter", alpha = I(0.6), colour = Month) 20 | qplot(Lake, log(Infection + 1), data = dreissena, 21 | geom = "jitter", alpha = I(0.6), colour = Month, 22 | size = Length) 23 | 24 | # ------------------------------- Рисунок 2.10 --------------------------------- 25 | qplot(Lake, log(Infection + 1), data = dreissena, geom = "boxplot") 26 | qplot(Lake, log(Infection + 1), data = dreissena, 27 | geom = "boxplot", colour = "red") 28 | qplot(Lake, log(Infection + 1), data = dreissena, 29 | geom = "boxplot", fill = "coral") 30 | 31 | # ------------------------------- Рисунок 2.11 --------------------------------- 32 | qplot(Lake, log(Infection + 1), data = dreissena, 33 | geom = c("jitter", "boxplot"), alpha = I(1/5), 34 | outlier.colour = NA) 35 | # отображение "выбросов" отключено 36 | # во избежание дублирования точек, являющихся 37 | # одновременно частью диаграммы рассеяния 38 | 39 | # ------------------------------- Рисунок 2.12 --------------------------------- 40 | qplot(Infection, data = dreissena, geom = "histogram", xlim = c(0, 11000)) 41 | qplot(Infection, data = dreissena, geom = "histogram", binwidth = 1000, 42 | xlim = c(0, 11000)) 43 | qplot(Infection, data = dreissena, geom = "histogram", binwidth = 50, 44 | xlim = c(0, 11000)) 45 | 46 | # ------------------------------- Рисунок 2.13 --------------------------------- 47 | qplot(log(Infection + 1), data = dreissena, 48 | geom = "histogram", fill = Lake) 49 | 50 | # ------------------------------- Рисунок 2.14 --------------------------------- 51 | qplot(log(Infection + 1), data = dreissena, geom = "density") 52 | qplot(log(Infection + 1), data = dreissena, 53 | geom = "density", adjust = 0.5) 54 | 55 | # ------------------------------- Рисунок 2.15 --------------------------------- 56 | qplot(log(Infection + 1), data = dreissena, geom = "density", colour = Lake) 57 | qplot(log(Infection + 1), data = dreissena, geom = "density", 58 | fill = Lake, alpha = I(1/4)) 59 | 60 | # ------------------------------- Рисунок 2.16 --------------------------------- 61 | qplot(log(Infection + 1), data = dreissena, geom = "freqpoly") 62 | qplot(log(Infection + 1), data = dreissena, 63 | geom = "freqpoly", binwidth = 0.8) 64 | qplot(log(Infection + 1), data = dreissena, 65 | geom = "freqpoly", binwidth = 0.7, colour = Month) 66 | 67 | # ------------------------------- Рисунок 2.17 --------------------------------- 68 | qplot(Lake, data = dreissena, geom = "bar") 69 | qplot(Lake, data = dreissena, geom = "bar", weight = Infection) 70 | 71 | # ------------------------------- Рисунок 2.18 --------------------------------- 72 | qplot(Lake, data = dreissena, geom = "bar", fill = Month) 73 | 74 | -------------------------------------------------------------------------------- /Scripts/Chapter_2/Section_2_4.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 2.4 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 2.19 --------------------------------- 9 | qplot(log(Infection + 1), data = dreissena, 10 | facets = Lake ~ ., geom = "histogram", binwidth = 0.2) 11 | 12 | # ------------------------------- Рисунок 2.20 --------------------------------- 13 | qplot(Lake, log(Infection + 1), data = dreissena, 14 | facets = . ~ Month, geom = "boxplot", 15 | colour = I("blue"), outlier.colour = "red") 16 | 17 | # ------------------------------- Рисунок 2.21 --------------------------------- 18 | qplot(Length, log(Infection + 1), data = dreissena, 19 | facets = Lake ~ Month, geom = c("point","smooth")) 20 | -------------------------------------------------------------------------------- /Scripts/Chapter_3/Chapter_3.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из 3-й главы книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 3.1 ---------------------------------- 9 | p <- ggplot(data = dreissena, aes(x = Infection)) 10 | p + layer(geom = "bar", stat = "bin", position = "identity", 11 | params = list(fill = "blue", binwidth = 100)) 12 | 13 | # ------------------------------- Рисунок 3.2 ---------------------------------- 14 | p <- ggplot(data = dreissena, aes(Lake, Length)) + geom_boxplot() 15 | # Исключим данные по озеру Баторино: 16 | newdata <- dreissena[dreissena$Lake != "Batorino", ] 17 | p %+% newdata 18 | 19 | # ------------------------------- Рисунок 3.3 ---------------------------------- 20 | ggplot(data = dreissena, aes(Length, Infection)) + geom_point(colour = "blue") 21 | ggplot(data = dreissena, aes(Length, Infection)) + 22 | geom_point(aes(colour = "blue")) 23 | 24 | # ------------------------------- Рисунок 3.4 ---------------------------------- 25 | library(doBy) 26 | # Функция summaryBy() из пакета doBy использована для расчета 27 | # средних значений интенсивности инвазии в каждом озере 28 | # для каждого дня отбора проб: 29 | InfectionMeans <- summaryBy(Infection ~ Lake + Day, 30 | data = dreissena) 31 | names(InfectionMeans)[3] <- "Infection" 32 | 33 | print(InfectionMeans) 34 | 35 | ggplot(data = InfectionMeans, aes(Day, Infection)) + geom_point() 36 | 37 | # ------------------------------- Рисунок 3.5 ---------------------------------- 38 | ggplot(data = InfectionMeans, aes(Day, Infection)) + geom_line() 39 | 40 | # ------------------------------- Рисунок 3.6 ---------------------------------- 41 | ggplot(data = InfectionMeans, aes(Day, Infection, group = Lake)) + geom_line() 42 | 43 | # ------------------------------- Рисунок 3.7 ---------------------------------- 44 | ggplot(data = InfectionMeans, aes(Day, Infection, group = Lake, colour = Lake)) + 45 | geom_line() 46 | 47 | # ------------------------------- Рисунок 3.8 ---------------------------------- 48 | ggplot(dreissena, aes(sample = Infection, colour = Lake)) + stat_qq() 49 | 50 | # ------------------------------- Рисунок 3.9 ---------------------------------- 51 | # По умолчанию по оси X графика типа "квантиль-квантиль" 52 | # откладываются теоретически ожидаемые квантили нормального 53 | # распределения, а по оси Y - выборочные наблюдения. 54 | # Мы можем изменить такое поведение программы и 55 | # "перевернуть" оси следующим образом: 56 | 57 | ggplot(data = dreissena, aes(sample = Infection, colour = Lake)) + 58 | stat_qq(aes(x = ..sample.., y = ..theoretical..)) 59 | 60 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_10.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.10 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.85 --------------------------------- 9 | # Одномерная диаграмма рассеяния, на которой 10 | # к x-координатам точек добавлен небольшой шум (geom_jitter): 11 | p <- ggplot(data = subset(dreissena, Month == "May" & 12 | Lake == "Batorino"), aes(Site, Length)) + 13 | geom_jitter(position = position_jitter(width = 0.2), 14 | alpha = 0.4) 15 | 16 | # Добавим средние значения в виде крупных красных точек 17 | (a <- p + stat_summary(fun.y = mean, geom = "point", 18 | color = "red", size = 5)) 19 | 20 | # Добавим отрезки, символизирующие 0.25 и 0.75 квантили: 21 | a + stat_summary(fun.y = mean, 22 | fun.ymin = function(x){quantile(x, p = 0.25)}, 23 | fun.ymax = function(x){quantile(x, p = 0.75)}, 24 | geom = "errorbar", color = "blue", width = 0.25) 25 | 26 | # ------------------------------- Рисунок 4.86 --------------------------------- 27 | # Объект p определен как в коде для рис. 4.85 28 | require(Hmisc) # для mean_cl_boot() 29 | p + stat_summary(fun.data = mean_cl_boot, 30 | color = "magenta", size = 1) 31 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_2.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.2 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.1 ---------------------------------- 9 | ggplot(data = subset(dreissena, 10 | Lake == "Naroch" & Month == "May"), 11 | aes(x = Infection)) + geom_dotplot() 12 | 13 | # В соответствии с автоматическими настройками 14 | # приведенная выше команда создаст график с осью Y. 15 | # Однако в случае с одномерной точечной диаграммой 16 | # эта ось не имеет смысла. Ее можно отключить при 17 | # помощи функции scale_y_continuous() следующим образом: 18 | 19 | ggplot(data = subset(dreissena, Lake == "Naroch" & Month == "May"), 20 | aes(x = Infection)) + geom_dotplot() + 21 | scale_y_continuous(name = "", breaks = NULL) 22 | 23 | 24 | # ------------------------------- Рисунок 4.2 ---------------------------------- 25 | p <- ggplot(data = subset(dreissena, Lake == "Naroch" & Month == "May"), 26 | aes(x = Infection)) + 27 | scale_y_continuous(name = "", breaks = NULL) 28 | p + geom_dotplot() 29 | p + geom_dotplot(binwidth = 100) 30 | p + geom_dotplot(binwidth = 250) 31 | 32 | # ------------------------------- Рисунок 4.3 ---------------------------------- 33 | p <- ggplot(data = subset(dreissena, Lake == "Naroch" & Month == "May"), 34 | aes(x = Infection)) + 35 | scale_y_continuous(name = "", breaks = NULL) 36 | p + geom_dotplot(method = "histodot", binwidth = 100) 37 | p + geom_dotplot(method = "histodot", binwidth = 250) 38 | 39 | # ------------------------------- Рисунок 4.4 ---------------------------------- 40 | p <- ggplot(data = subset(dreissena, Lake == "Batorino" & Month == "May"), 41 | aes(x = Site, y = Infection)) 42 | p + geom_dotplot(binaxis = "y", stackdir = "up", 43 | binwidth = 50) 44 | p + geom_dotplot(binaxis = "y", stackdir = "down", 45 | binwidth = 50) 46 | p + geom_dotplot(binaxis = "y", stackdir = "center", 47 | binwidth = 50) 48 | 49 | # ------------------------------- Рисунок 4.5 ---------------------------------- 50 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), 51 | aes(x = Month, fill = Site, y = Infection)) 52 | p + geom_dotplot(binaxis = "y") 53 | p + geom_dotplot(binaxis = "y", position = "dodge") 54 | 55 | # ------------------------------- Рисунок 4.6 ---------------------------------- 56 | ggplot(data = subset(dreissena, Lake == "Batorino"), aes(Site)) + 57 | geom_bar() 58 | ggplot(data = subset(dreissena, Lake == "Batorino"), aes(Infection)) + 59 | geom_bar() 60 | 61 | # ------------------------------- Рисунок 4.7 ---------------------------------- 62 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), aes(x = Site)) 63 | p + geom_bar(width = 0.5) 64 | p + geom_bar(width = 0.5) + coord_flip() 65 | 66 | # ------------------------------- Рисунок 4.8 ---------------------------------- 67 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), aes(x = Site)) 68 | p + geom_bar(fill = "coral", colour = "blue", size = 1.2) 69 | p + geom_bar(fill = "coral", colour = "blue", size = 1.2, linetype = 2) 70 | 71 | # ------------------------------- Рисунок 4.9 ---------------------------------- 72 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), aes(x = Site)) 73 | p + geom_bar(aes(fill = Month), position = "stack") 74 | p + geom_bar(aes(fill = Month), position = "fill") 75 | p + geom_bar(aes(fill = Month), position = "dodge") 76 | 77 | # ------------------------------- Рисунок 4.10 --------------------------------- 78 | p <- ggplot(data = subset(dreissena, Lake == "Naroch" & Month == "May"), 79 | aes(x = Site)) 80 | p + geom_bar() 81 | p + geom_bar(aes(weight = Infection)) 82 | 83 | # ------------------------------- Рисунок 4.11 --------------------------------- 84 | library(doBy) 85 | 86 | # Расчет средних значений интенсивности инвазии 87 | # с сохранением результатов в виде таблицы данных: 88 | meanInfection <- summaryBy(Infection ~ Lake, data = dreissena) 89 | 90 | # Точечная диаграмма со средними значениями: 91 | ggplot(data = meanInfection, aes(x = Lake, y = Infection.mean)) + geom_point() 92 | 93 | # Столбиковая диаграмма с теми же средними значениями 94 | # (обратите внимание на аргумент stat = "identity" 95 | # функции geom_bar(): он заставляет эту функцию принять 96 | # средние значения "как есть", без выполнения каких-либо 97 | # дополнительных преобразований): 98 | ggplot(data = meanInfection, aes(x = Lake, y = Infection.mean)) + 99 | geom_bar(stat = "identity") 100 | 101 | # ------------------------------- Рисунок 4.12 --------------------------------- 102 | p <- ggplot(data = dreissena, aes(x = Infection)) 103 | p + geom_histogram() 104 | p + geom_histogram(binwidth = 50) 105 | 106 | # ------------------------------- Рисунок 4.13 --------------------------------- 107 | p <- ggplot(data = subset(dreissena, Lake == "Naroch"), aes(x = Infection)) 108 | p + geom_histogram(aes(y = ..density..)) 109 | p + geom_histogram(aes(y = ..density..)) + 110 | geom_density(colour = "magenta") 111 | 112 | # ------------------------------- Рисунок 4.14 --------------------------------- 113 | p <- ggplot(data = subset(dreissena, Lake == "Naroch"), aes(x = Infection)) 114 | p + geom_histogram(aes(fill = Month)) 115 | p + geom_histogram(aes(fill = Month), position = "dodge") 116 | 117 | # ------------------------------- Рисунок 4.15 --------------------------------- 118 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), aes(x = Infection)) 119 | p + geom_histogram(binwidth = 500) 120 | p + geom_histogram(binwidth = 500) + 121 | geom_freqpoly(binwidth = 500, colour = "magenta") 122 | 123 | # ------------------------------- Рисунок 4.16 --------------------------------- 124 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), aes(x = Infection)) 125 | p + geom_freqpoly(binwidth = 50, colour = "blue") 126 | p + geom_freqpoly(binwidth = 100, colour = "darkgreen", size = 1.2) 127 | 128 | # ------------------------------- Рисунок 4.17 --------------------------------- 129 | # Объект p определен как на рис. 4.16 130 | p + geom_freqpoly(aes(colour = Month), binwidth = 500) 131 | p + geom_freqpoly(aes(y = ..density.., colour = Month), binwidth = 500) 132 | 133 | # ------------------------------- Рисунок 4.18 --------------------------------- 134 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), 135 | aes(x = log(Infection + 1))) 136 | p + geom_density(kernel = "rectangular") 137 | p + geom_density(kernel = "epanechnikov") 138 | p + geom_density(kernel = "rectangular", adjust = 1/3) 139 | p + geom_density(kernel = "epanechnikov", adjust = 1/3) 140 | 141 | # ------------------------------- Рисунок 4.19 --------------------------------- 142 | p <- ggplot(data = subset(dreissena, Lake == "Batorino"), 143 | aes(x = log(Infection + 1))) 144 | p + geom_density(aes(fill = Month), size = 1.1) 145 | p + geom_density(aes(fill = Month), colour = "blue", 146 | linetype = 2, alpha = 0.6) 147 | 148 | # ------------------------------- Рисунок 4.20 --------------------------------- 149 | p <- ggplot(data = dreissena, aes(x = log(Infection + 1))) 150 | p + geom_density(aes(group = factor(Day))) 151 | p + geom_density(aes(group = factor(Day), colour = Day)) 152 | 153 | # ------------------------------- Рисунок 4.22 --------------------------------- 154 | # Для наглядности отсортируем исходную таблицу с данными, 155 | # выбрав только те значение переменной Infection, которые 156 | # лежат в диапазоне от 100 до 200: 157 | dreissena2 <- subset(dreissena, Infection > 100 & Infection < 200) 158 | 159 | # Упорядочим значения переменной Infection по возрастанию: 160 | dreissena2 <- dreissena2[order(dreissena2$Infection), ] 161 | p <- ggplot(data = dreissena2, aes(x = 1:nrow(dreissena2), y = Infection)) 162 | p + geom_step(direction = "hv") + geom_step(direction = "vh", colour = "blue") 163 | p + geom_step(colour = "red", size = 1.1) 164 | 165 | # ------------------------------- Рисунок 4.23 --------------------------------- 166 | p <- ggplot(data = dreissena2,aes(x = Infection)) 167 | p + geom_step(stat = "ecdf") 168 | p + geom_step(aes(colour = Lake), stat = "ecdf") 169 | 170 | # ------------------------------- Рисунок 4.24 --------------------------------- 171 | p <- ggplot(data = subset(dreissena, Lake == "Batorino" & Month == "May"), 172 | aes(sample = Infection)) 173 | p + stat_qq() 174 | p + stat_qq(aes(colour = Site)) 175 | 176 | # ------------------------------- Рисунок 4.25 --------------------------------- 177 | # Интенсивность инвазии дрейссены инфузорией C. acuminatus - 178 | # дискретная количественная переменная. Часто для описания 179 | # распределения таких переменных подходят распределение 180 | # Пуассона или негативное биномиальное распределение. 181 | # Проверим, какой из этих двух законов распределения 182 | # вероятностей подходит лучше для данных по озеру Баторино, 183 | # полученных в мае 2005 г. 184 | # Для удобства сохраним данные в виде отдельной таблицы: 185 | dreissena2 <- subset(dreissena, Lake == "Batorino" & Month == "May") 186 | 187 | # Оценим параметры теоретических распределений по 188 | # выборочным данным (использована функция fitdistr из 189 | # базового R-пакета MASS): 190 | library(MASS) 191 | params1 <- as.list(fitdistr(dreissena2$Infection, 192 | "Negative Binomial")$estimate) 193 | params2 <- as.list(fitdistr(dreissena2$Infection, 194 | "Poisson")$estimate) 195 | 196 | # Построим квантильные графики: 197 | ggplot(dreissena2, aes(sample = Infection)) + 198 | stat_qq(distribution = qpois, dparams = params2) 199 | ggplot(dreissena2, aes(sample = Infection)) + 200 | stat_qq(distribution = qnbinom, dparams = params1) 201 | 202 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_3.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.3 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.26 --------------------------------- 9 | p <- ggplot(data = subset(dreissena, Lake == "Naroch"), 10 | aes(x = Length, y = log(Infection + 1))) + geom_point() 11 | p + stat_density2d() 12 | p + stat_density2d(n = 10) 13 | 14 | # ------------------------------- Рисунок 4.27 --------------------------------- 15 | p <- ggplot(data = subset(dreissena, Lake == "Naroch" & Month == "May"), 16 | aes(x = Length, y = log(Infection + 1))) + 17 | geom_point(aes(colour = Site)) 18 | p + stat_density2d(aes(colour = Site)) 19 | p + stat_density2d(aes(colour = Site), alpha = 0.4) 20 | 21 | # ------------------------------- Рисунок 4.28 --------------------------------- 22 | # матрица volcano преобразована в таблицу данных: 23 | volcano3d <- reshape2::melt(volcano) 24 | names(volcano3d) <- c("x", "y", "z") 25 | 26 | # Построение графиков: 27 | p <- ggplot(data = volcano3d, aes(x = x, y = y, z = z)) 28 | p + geom_contour() 29 | p + geom_contour(bins = 5) 30 | 31 | # ------------------------------- Рисунок 4.29 --------------------------------- 32 | p + geom_contour(bins = 50, colour = "rosybrown") 33 | p + geom_contour(bins = 50, size = 0.5, 34 | colour = "rosybrown", alpha = 0.5) + 35 | geom_contour(bins = 5, size = 1) 36 | 37 | # ------------------------------- Рисунок 4.30 --------------------------------- 38 | p + geom_contour(aes(colour = ..level..)) 39 | p + geom_tile(aes(fill = z)) + geom_contour() 40 | 41 | # ------------------------------- Рисунок 4.31 --------------------------------- 42 | library(hexbin) 43 | p <- ggplot(data = dreissena, aes(x = Length, y = log(Infection + 1))) 44 | p + geom_point() 45 | p + geom_hex() 46 | p + geom_hex(bins = 10) 47 | 48 | # ------------------------------- Рисунок 4.32 --------------------------------- 49 | # Объект p определен как на рис. 4.31 50 | p + geom_hex(bins = c(2, 30), alpha = 0.6) 51 | p + geom_hex(bins = 10, colour = "red") 52 | 53 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_4.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.4 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.33 --------------------------------- 9 | library(doBy) 10 | 11 | # Таблица с минимальными значениями: 12 | MIN <- summaryBy(Length ~ Month, FUN = min, 13 | data = subset(dreissena, Lake == "Myastro")) 14 | 15 | # Таблица с максимальными значениями: 16 | MAX <- summaryBy(Length ~ Month, FUN = max, 17 | data = subset(dreissena, Lake == "Myastro")) 18 | 19 | # Таблица со средними значениями: 20 | MEAN <- summaryBy(Length ~ Month, FUN = mean, 21 | data = subset(dreissena, Lake == "Myastro")) 22 | 23 | # Таблица со стандартными ошибками: 24 | SE <- summaryBy(Length ~ Month, 25 | FUN = function(x) sd(x)/sqrt(length(x)), 26 | data = subset(dreissena, Lake == "Myastro")) 27 | 28 | # Сводная таблица с параметрами описательной статистики: 29 | dat <- data.frame(MIN[1], MIN[2], MAX[2], MEAN[2], SE[2]) 30 | names(dat) <- c("Month", "Min", "Max", "Mean", "SE") 31 | 32 | # Построение графиков: 33 | p <- ggplot(data=dat, aes(x = Month, ymin = Min, ymax = Max)) 34 | p + geom_linerange() + ylab("Length") 35 | p + geom_pointrange(aes(y = Mean)) 36 | 37 | # ------------------------------- Рисунок 4.34 --------------------------------- 38 | # объект p определен как на рис. 4.33 39 | p + geom_pointrange(aes(y = Mean), shape = 2, linetype = 2) 40 | p + geom_pointrange(aes(y = Mean, colour = Month)) 41 | 42 | # ------------------------------- Рисунок 4.35 --------------------------------- 43 | p <- ggplot(data = dat, aes(x = Month, ymin = Mean - SE, ymax = Mean + SE)) 44 | p + geom_point(aes(y = Mean)) + geom_errorbar() 45 | p + geom_point(aes(y = Mean)) + geom_errorbar(width = 0.25) 46 | 47 | # ------------------------------- Рисунок 4.36 --------------------------------- 48 | # объект p определен как на рис. 4.35 49 | p + geom_bar(aes(y = Mean, fill = Month), stat = "identity") + 50 | geom_errorbar(width = 0.25) 51 | q <- ggplot(data = dat, aes(x = Mean, y = Month)) 52 | q + geom_point() + geom_errorbarh(aes(xmax = Mean + SE, 53 | xmin = Mean - SE), height = 0.25) 54 | 55 | # ------------------------------- Рисунок 4.37 --------------------------------- 56 | # объект p определен как на рис. 4.35 57 | p + geom_crossbar(aes(y = Mean)) 58 | p + geom_crossbar(aes(y = Mean, fill = Month), fatten = 5) 59 | 60 | # ------------------------------- Рисунок 4.38 --------------------------------- 61 | p <- ggplot(data = dreissena, aes(x = Lake, y = log(Infection+1))) 62 | p + geom_boxplot() 63 | p + geom_boxplot(fill = "coral", color = "blue") 64 | 65 | # ------------------------------- Рисунок 4.39 --------------------------------- 66 | # здесь и до рис. 4.42 объект p определен как на рис. 4.38 67 | p + geom_boxplot(size = 1.2) 68 | p + geom_boxplot(outlier.shape = 2, outlier.colour = "blue") 69 | 70 | 71 | # ------------------------------- Рисунок 4.40 --------------------------------- 72 | p + geom_boxplot(notch = TRUE) 73 | p + geom_boxplot(notch = TRUE, notchwidth = 0.2) 74 | 75 | # ------------------------------- Рисунок 4.41 --------------------------------- 76 | # График слева: 77 | p + geom_boxplot() 78 | 79 | # График справа: 80 | require(doBy) 81 | quant10 <- function(x) quantile(x, p = 0.10) 82 | quant90 <- function(x) quantile(x, p = 0.90) 83 | stats <- summaryBy(data = dreissena, 84 | log(Infection + 1) ~ Lake, 85 | FUN = c(min, max, mean, quant10, quant90)) 86 | names(stats) <- c("Lake", "Min", "Max", "Mean", "Q10", "Q90") 87 | q <- ggplot(stats) 88 | q + geom_boxplot(aes(x = Lake, ymin = Min, ymax = Max, 89 | lower = Q10, middle = Mean, 90 | upper = Q90), stat = "identity") + 91 | ylab("log(Infection+1)") 92 | 93 | # ------------------------------- Рисунок 4.42 --------------------------------- 94 | p + geom_boxplot(aes(fill = Month)) 95 | 96 | # ------------------------------- Рисунок 4.43 --------------------------------- 97 | p <- ggplot(data = dreissena, aes(x = Lake, y = log(Infection+1))) 98 | p + geom_violin(scale = "area") 99 | p + geom_violin(scale = "count") 100 | p + geom_violin(scale = "width") 101 | 102 | # ------------------------------- Рисунок 4.44 --------------------------------- 103 | # здесь и до рис. 4.48 объект p определен как на рис. 4.43 104 | p + geom_violin(trim = TRUE) 105 | p + geom_violin(adjust = 0.4, trim = FALSE) 106 | p + geom_violin(adjust = 0.4, trim = FALSE) + 107 | coord_flip() 108 | 109 | # ------------------------------- Рисунок 4.45 --------------------------------- 110 | p + geom_violin(trim = FALSE, fill = "red") 111 | p + geom_violin(trim = FALSE, fill = "red", colour = "blue") 112 | p + geom_violin(trim = FALSE, fill = "red", alpha = 0.5, 113 | colour = "blue", size = 1.5) 114 | 115 | # ------------------------------- Рисунок 4.46 --------------------------------- 116 | p + geom_violin(trim = FALSE) + geom_point(shape = 19, alpha = 0.2) 117 | p + geom_violin(trim = FALSE) + geom_jitter(shape = 19, alpha = 0.2) 118 | 119 | # ------------------------------- Рисунок 4.47 --------------------------------- 120 | p + geom_violin(aes(fill = Month), trim = FALSE) 121 | 122 | # ------------------------------- Рисунок 4.48 --------------------------------- 123 | p + geom_violin(aes(fill = Lake), trim = FALSE, alpha = 0.3) + 124 | geom_boxplot(aes(fill = Lake), width = 0.2, outlier.colour = NA) 125 | 126 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_5.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.5 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.49 --------------------------------- 9 | p <- ggplot(data = dreissena, aes(x = Length, y = log(Infection + 1))) 10 | p + geom_point() 11 | p + geom_point(shape = 22, size = 4, fill = "pink") 12 | p + geom_point(shape = 15, size = 3, colour = "blue", alpha = 0.2) 13 | 14 | # ------------------------------- Рисунок 4.50 --------------------------------- 15 | # здесь и до рис. 4.54 объект p определен как на рис. 4.49 16 | p + geom_point(aes(colour = Lake)) 17 | p + geom_point(aes(size = Day), colour = "tomato", alpha = 0.3) 18 | 19 | # ------------------------------- Рисунок 4.51 --------------------------------- 20 | p + geom_point(aes(colour = Day)) 21 | p + geom_point(colour = "gray30", size = 3.5) + geom_point(aes(colour = Day)) 22 | 23 | # ------------------------------- Рисунок 4.52 --------------------------------- 24 | p + geom_point(alpha = 1/2) + geom_smooth() 25 | p + geom_point(alpha = 1/2) + geom_smooth(method = "lm") 26 | p + geom_point(alpha = 1/2) + geom_smooth(method = "lm", se = FALSE) 27 | 28 | # ------------------------------- Рисунок 4.53 --------------------------------- 29 | library(mgcv); library(splines); library(MASS) 30 | p + geom_smooth(method = "gam", formula = y ~ s(x, bs = "cs")) 31 | p + geom_smooth(method = "lm", formula = y ~ poly(x, 2)) 32 | p + geom_smooth(method = "rlm", formula = y ~ ns(x, 3)) 33 | 34 | # ------------------------------- Рисунок 4.54 --------------------------------- 35 | p + geom_smooth(fill = "yellow") 36 | p + geom_smooth(fill = "blue", colour = "red", alpha = 0.2) 37 | p + geom_smooth(fill = "skyblue", colour = "darkblue", linetype = 2, size = 2) 38 | 39 | # ------------------------------- Рисунок 4.55 --------------------------------- 40 | p <- ggplot(data = dreissena, aes(x = Length, 41 | y = log(Infection + 1), colour = Lake)) 42 | p + geom_smooth(aes(fill = Lake), alpha = 0.2, size = 2) 43 | 44 | # ------------------------------- Рисунок 4.56 --------------------------------- 45 | library(quantreg) # для функции rq() 46 | library(splines) # для функции ns() 47 | p <- ggplot(data = dreissena, aes(x = Length, y = log(Infection + 1))) + 48 | geom_point(alpha = 0.2) 49 | p + geom_quantile() 50 | p + geom_quantile(formula = y ~ poly(x, 2)) 51 | p + geom_quantile(formula = y ~ ns(x, 3)) 52 | 53 | # ------------------------------- Рисунок 4.57 --------------------------------- 54 | # здесь и до рис. 4.58 объект р определен как на рис. 4.56 55 | p + geom_quantile(formula = y ~ x, quantiles = c(0.5), size = 1) + 56 | geom_smooth(method = "lm", colour = "red", size = 1, se = FALSE) 57 | p + geom_quantile(formula = y ~ ns(x, 3), colour = "red", 58 | quantiles = c(0.025, 0.5, 0.975)) 59 | p + geom_quantile(formula = y ~ ns(x, 3), colour = "magenta", 60 | linetype = 2, size = 1, quantiles = c(0.025, 0.5, 0.975)) 61 | 62 | # ------------------------------- Рисунок 4.58 --------------------------------- 63 | p + aes(colour = Lake) + geom_quantile(formula = y ~ ns(x, 3), 64 | quantiles = c(0.5), size = 1) 65 | p + geom_quantile(aes(colour = ..quantile..), formula = y ~ ns(x, 3), 66 | quantiles = seq(0.05, 0.95, by = 0.05) ) 67 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_6.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.6 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.59 --------------------------------- 9 | p <- ggplot(data = economics, aes(x = date, y = unemploy)) + 10 | xlab("Дата") + ylab("Численность, тыс.") 11 | p + geom_line() 12 | p + geom_line(colour = "blue", size = 1) 13 | 14 | # ------------------------------- Рисунок 4.60 --------------------------------- 15 | econ <- economics # копия исходной таблицы 16 | 17 | # добавим новую переменную - год проведения исследования: 18 | econ$year <- 1900 + as.POSIXlt(economics$date)$year 19 | 20 | # добавим новую переменную - месяц (внимание: в R 21 | # по умолчанию январь имеет порядковый номер 0): 22 | econ$month <- as.POSIXlt(economics$date)$mon 23 | 24 | # Построение графиков: 25 | p <- ggplot(data = econ, aes(x = month, y = unemploy, group = factor(year))) + 26 | xlab("Месяц") + ylab("Численность, тыс.") 27 | 28 | # Использование переменной year в качестве фактора 29 | # (функция theme() использована для отключения легенды; 30 | # подробнее эта функция будет рассмотрена в главe 8): 31 | p + geom_line(aes(colour = factor(year))) + 32 | theme(legend.position = "NA") 33 | 34 | # year как количественная переменная: 35 | p + geom_line(aes(colour = year)) 36 | 37 | # ------------------------------- Рисунок 4.61 --------------------------------- 38 | p <- ggplot(data = economics, aes(x = date, ymax = unemploy + 1000, 39 | ymin = unemploy - 1000)) + 40 | xlab("Дата") + ylab("Численность, тыс.") 41 | p + geom_ribbon() 42 | p + geom_ribbon(fill = "lightblue", colour = "blue", linetype = 3) 43 | p + geom_ribbon(fill = "orange", colour = "red", size = 1) + 44 | geom_line(aes(y = unemploy)) 45 | 46 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_7.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.7 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.62 --------------------------------- 9 | # Этот пример основан на искусственных данных, 10 | # сгенерированных следующим образом: 11 | x = seq(-10, 10, 1) 12 | df <- expand.grid(X = x, Y = x) 13 | df$z <- sin(df$X)*cos(df$Y/3) 14 | 15 | # Построение графиков: 16 | p <- ggplot(df, aes(x = X, y = Y, fill = z)) 17 | p + geom_tile() 18 | 19 | # В приведенной ниже команде функция scale_fill_gradient() 20 | # использована для смены цветовой гаммы. Эта функция будет 21 | # подробно рассмотрена позднее: 22 | p + geom_tile() + 23 | scale_fill_gradient(low = "red", high = "yellow") 24 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_8.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.8 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.63 --------------------------------- 9 | p <- ggplot(data = subset(dreissena, Lake == "Naroch"), 10 | aes(x = log(Infection + 1))) 11 | p + geom_density(fill = "orchid") + geom_rug() 12 | p + geom_density(fill = "orchid") + geom_rug(colour = "red") 13 | p + geom_density(fill = "orchid") + geom_rug(colour = "red", alpha = 0.3) 14 | 15 | # ------------------------------- Рисунок 4.64 --------------------------------- 16 | p <- ggplot(data = subset(dreissena, Lake == "Naroch"), 17 | aes(x = Length, y = log(Infection + 1))) 18 | p + geom_rug() 19 | p + geom_point() + geom_rug() 20 | p + geom_point() + geom_rug(sides = "tr") 21 | 22 | # ------------------------------- Рисунок 4.65 --------------------------------- 23 | # Отдельная таблица данных по оз. Нарочь: 24 | Naroch <- subset(dreissena, Lake == "Naroch") 25 | 26 | # Добавим столбец с log-значениями интенсивности инвазии: 27 | Naroch$logInf <- log(Naroch$Infection + 1) 28 | 29 | # Рассчитаем медиану интенсивности инвазии (на log-шкале): 30 | med.inf <- median(Naroch$logInf) 31 | 32 | # Добавим столбец с метками уровеня инвазии - 33 | # ниже ("Lower") или выше ("Higher") медианы: 34 | Naroch$Level <- with(Naroch, ifelse(logInf < med.inf, "Lower", "Higher")) 35 | 36 | # Инициализация диаграммы рассеяния, на которой цвет точек 37 | # задан в соответствии с уровнем инвазии (Level): 38 | p <- ggplot(data = Naroch, aes(x = Length, y = logInf, colour = Level)) + 39 | theme(legend.position = "none") 40 | 41 | # Диаграмма рассеяния c горизонтальной линией, 42 | # символизирующей медианный уровень инвазии: 43 | p + geom_point() + geom_hline(yintercept = med.inf) 44 | 45 | # То же, но внешний вид горизонтальной линии изменен: 46 | p + geom_point() + geom_hline(yintercept = med.inf, 47 | colour = "blue", linetype = 5, size = 1) 48 | 49 | # Добавляем три горизонтальные линии, соответствующие 50 | # 0.25, 0.5 и 0.75 процентилям интенсивности инвазии: 51 | p + geom_point(colour = "gray40") + 52 | geom_hline(yintercept = quantile(Naroch$logInf, 53 | p = c(0.25, 0.5, 0.75)), 54 | colour = "blue") 55 | 56 | # ------------------------------- Рисунок 4.66 --------------------------------- 57 | # Рассчет среднего значения длины раковины дрейссены 58 | # (по данным из таблицы Naroch - см. предыдущий пример): 59 | mean.L <- mean(Naroch$Length) 60 | 61 | # Добавляем столбец с метками класса mean.L - 62 | # "Ниже" или "Выше" среднего значения: 63 | Naroch$L.level <- with(Naroch, 64 | ifelse(Length < mean.L, "Lower", "Higher")) 65 | 66 | # Инициализация диаграммы рассеяния, на которой цвет точек 67 | # задан в соответствии с классом длины раковины (L.level): 68 | p <- ggplot(data = Naroch, 69 | aes(x = Length, y = logInf, colour = L.level)) + 70 | theme(legend.position = "none") 71 | 72 | # Диаграмма рассеяния с вертикальной линией, 73 | # символизирующей среднюю длину раковины: 74 | p + geom_point() + geom_vline(xintercept = mean.L) 75 | 76 | # То же, но внешний вид вертикальной линии изменен: 77 | p + geom_point() + geom_vline(xintercept = mean.L, 78 | colour = "blue", linetype = 5, size = 1) 79 | 80 | # Добавляем три вертикальные линии, соответствующие 81 | # 0.25, 0.5 и 0.75 процентилям длины раковины: 82 | p + geom_point(colour = "gray40") + 83 | geom_vline(xintercept = quantile(Naroch$Length, p = c(0.25, 0.5, 0.75)), 84 | colour = "blue") 85 | 86 | # ------------------------------- Рисунок 4.67 --------------------------------- 87 | set.seed(1022) # для воспроизводимости примера 88 | 89 | # Таблица, содержащая случайно сгенерированные значения, 90 | # которые будут использованы при определении координат 91 | # прямоугольных областей: 92 | df <- data.frame(x = sample(10, 20, replace = TRUE), 93 | y = sample(10, 20, replace = TRUE)) 94 | 95 | p <- ggplot(df, aes(xmin = x, xmax = x + 1, 96 | ymin = y, ymax = y + 2)) 97 | p + geom_rect() 98 | p + geom_rect(fill = "orange") 99 | p + geom_rect(fill = "orange", col = "black", linetype = 2) 100 | 101 | # ------------------------------- Рисунок 4.68 --------------------------------- 102 | # Этот пример основан на искусственных данных, 103 | # созданных следующим образом: 104 | df <- data.frame(X = c(1, 4, 5), XEND = c(2, 3, 6), 105 | Y = c(1, 3, 5), YEND = c(2, 4, 6)) 106 | 107 | p <- ggplot(df, aes(x = X, xend = XEND, y = Y, yend = YEND)) 108 | p + geom_segment() 109 | p + geom_segment(arrow = arrow(length = unit(0.5,"cm")), colour = "blue") 110 | p + geom_segment(arrow = arrow(length = unit(0.5,"cm"), 111 | ends = "both"), colour = "red", size = 1) 112 | 113 | # ------------------------------- Рисунок 4.69 --------------------------------- 114 | set.seed(1100) # для воспроизводимости примера 115 | df <- data.frame(X = sample(10, 20, replace = TRUE), 116 | Y = sample(10, 20, replace = TRUE), 117 | Time = 1:20) 118 | p <- ggplot(df, aes(x = X, y = Y)); p + geom_path() 119 | p + geom_path(aes(colour = Time), size = 1) 120 | 121 | # ------------------------------- Рисунок 4.70 --------------------------------- 122 | df <- data.frame(x = 1:3, y = c(4, 1, 9)) 123 | p <- ggplot(df, aes(x, y)) + xlim(c(0, 4)) + ylim(c(0, 10)) 124 | p + geom_path(size = 10, lineend = "round") # "A" 125 | p + geom_path(size = 10, lineend = "butt") # "B" 126 | p + geom_path(size = 10, lineend = "square") # "C" 127 | p + geom_path(size = 10, lineend = "round", 128 | linejoin = "round") # "D" 129 | p + geom_path(size = 10, lineend = "round", 130 | linejoin = "mitre") # "E" 131 | p + geom_path(size = 10, lineend = "round", 132 | linejoin = "bevel") # "F" 133 | 134 | # ------------------------------- Рисунок 4.71 --------------------------------- 135 | set.seed(1100) 136 | df <- data.frame(X = sample(10, 20, replace = TRUE), 137 | Y = sample(10, 20, replace = TRUE), 138 | Time = 1:20) 139 | p <- ggplot(df, aes(x = X, y = Y)) 140 | p + geom_path(aes(size = Time), alpha = 0.4, colour = "tomato") 141 | p + geom_path(aes(size = Time), alpha = 0.4, colour = "tomato", lineend = "round") 142 | 143 | # ------------------------------- Рисунок 4.72 --------------------------------- 144 | # Этот пример основан на искусственных данных. 145 | # ids - это идентификаторы отдельных частей многоугольника: 146 | ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) 147 | positions <- data.frame( id = rep(ids, each = 4), 148 | x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 149 | 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 150 | 0.6, 1.3), 151 | y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 152 | 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 153 | 2.2, 3.3, 3.2)) 154 | p <- ggplot(data = positions, aes(x = x, y = y, group = id)) 155 | p + geom_polygon() 156 | p + geom_polygon(colour = "white", fill = "blue") 157 | p + geom_polygon(colour = "white", fill = "blue", size = 1.6) 158 | 159 | # ------------------------------- Рисунок 4.73 --------------------------------- 160 | # В этом примере отдельные части многоугольника, координаты 161 | # которого хранятся в таблице positions (см. рис. 4.72), 162 | # будут залиты цветом в соответствии со значениями третьей 163 | # количественной переменной. Значения такой переменной обычно 164 | # хранятся в отдельной таблице. Перед созданием графика 165 | # обе таблицы должны быть объединены (команда merge ниже). 166 | values <- data.frame(id = ids, value = c(4.5, 3.8, 3.2, 3, 2.5, 1.4)) 167 | polygon <- merge(values, positions, by = c("id")) 168 | ggplot(data = polygon, aes(x = x, y = y, group = id)) + 169 | geom_polygon(aes(fill = value)) 170 | 171 | # ------------------------------- Рисунок 4.74 --------------------------------- 172 | # Расчет медианных значений интенсивности инвазии 173 | # (с сохранением результатов в отдельной таблице): 174 | library(doBy) 175 | medInfection <- summaryBy( 176 | Infection ~ Site + Day, FUN = median, 177 | data = subset(dreissena, Lake == "Naroch")) 178 | 179 | p <- ggplot(data = subset(medInfection, Site == "S9"), 180 | aes(x = Day, y = Infection.median)) 181 | p + geom_area() 182 | p + geom_area(fill = "skyblue") 183 | p + geom_area(colour = 4, fill = "white", alpha = 0.6, linetype = 2, size = 2) 184 | 185 | # ------------------------------- Рисунок 4.75 --------------------------------- 186 | p <- ggplot(data = medInfection, aes(x = Day, y = Infection.median)) 187 | p + geom_area(aes(fill = Site)) 188 | 189 | # ------------------------------- Рисунок 4.76 --------------------------------- 190 | library(dplyr) # для group_by() и summarise() 191 | by.lake <- dreissena %>% group_by(Lake) %>% 192 | summarise(Length = round(median(Length)), 193 | Infection = round(median(Infection))) 194 | ggplot(data = by.lake, aes(Length, Infection)) + 195 | geom_point(colour = "blue", size = 4) + 196 | geom_text(aes(label = Lake)) + 197 | xlim(11, 20) + ylim(150, 750) 198 | ggplot(data = by.lake, aes(Length, Infection)) + 199 | geom_point(colour = "blue", size = 4) + 200 | geom_text(aes(label = Lake), hjust = 1.2) + 201 | xlim(11, 20) + ylim(150, 750) 202 | ggplot(data = by.lake, aes(Length, Infection)) + 203 | geom_point(colour = "blue", size = 4) + 204 | geom_text(aes(label = Lake), hjust = 1.2, 205 | vjust = -1.2) + xlim(11, 20) + ylim(150, 750) 206 | 207 | # ------------------------------- Рисунок 4.77 --------------------------------- 208 | # Объект by.lake определен как на рис. 4.76 209 | ggplot(data = by.lake, aes(Length, Infection)) + 210 | geom_point(colour = "blue", size = 4) + 211 | geom_text(aes(label = Lake), hjust = 1.2, colour = "red") + 212 | xlim(11, 20) + ylim(120, 750) 213 | ggplot(data = by.lake, aes(Length, Infection)) + 214 | geom_point(colour = "blue", size = 4) + 215 | geom_text(aes(label = Lake), hjust = 1.2, colour = "red", angle = 15) + 216 | xlim(11, 20) + ylim(120, 750) 217 | 218 | # ------------------------------- Рисунок 4.78 --------------------------------- 219 | # Объект by.lake определен как на рис. 4.76 220 | ggplot(data = by.lake, aes(Length, Infection)) + 221 | geom_point(colour = "blue", size = 4) + 222 | geom_text(aes(label = Lake), hjust = 1.2, family = "mono") + 223 | xlim(11, 20) + ylim(120, 750) 224 | ggplot(data = by.lake, aes(Length, Infection)) + 225 | geom_point(colour = "blue", size = 4) + 226 | geom_text(aes(label = Lake, hjust = 1.2, 227 | fontface = c("plain", "bold", 228 | "italic")[as.numeric(Lake)])) + 229 | xlim(11, 20) + ylim(120, 750) 230 | 231 | # ------------------------------- Рисунок 4.79 --------------------------------- 232 | # Объект by.lake определен как на рис. 4.76 233 | ggplot(data = by.lake, aes(Length, Infection)) + 234 | geom_point(colour = "blue", size = 4) + 235 | geom_text(aes(label = Lake, size = Infection), hjust = 1.2) + 236 | xlim(11, 20) + ylim(120, 750) 237 | ggplot(data = by.lake, aes(Length, Infection)) + 238 | geom_point(colour = "blue", size = 4) + 239 | geom_text(data = NULL, label = "Some text", 240 | x = 16, y = 700) + xlim(11, 20) + ylim(120, 750) 241 | 242 | # ------------------------------- Рисунок 4.80 --------------------------------- 243 | # Объект by.lake определен как на рис. 4.76 244 | ggplot(data = by.lake, aes(Length, Infection)) + 245 | geom_point(colour = "blue", size = 4) + 246 | geom_text(aes(label = paste("over(", Infection, ", host)")), 247 | parse = TRUE, hjust = 1.3) + 248 | xlim(11, 20) + ylim(120, 750) 249 | ggplot(data = by.lake, aes(Length, Infection)) + 250 | geom_point(colour = "blue", size = 4) + 251 | geom_text(aes(label = paste("rho[est.]==", 252 | round(cor(Length, Infection), 2), sep = "")), 253 | size = 10, parse = TRUE, x = 16.5, y = 600) 254 | 255 | -------------------------------------------------------------------------------- /Scripts/Chapter_4/Section_4_9.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 4.9 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 4.81 --------------------------------- 9 | gadm <- readRDS(gzcon(url("http://biogeo.ucdavis.edu/data/gadm2.8/rds/BLR_adm2.rds"))) 10 | 11 | # просмотр содержимого объекта gadm: 12 | slotNames(gadm) 13 | 14 | library(broom) # для функции tidy() 15 | library(maps); library(rgeos); library(maptools) 16 | # При помощи аргумента region со значением "NAME_2" 17 | # мы указываем переменную, в которой хранятся 18 | # идентификаторы административных единиц - районов: 19 | counties <- tidy(gadm, region = "NAME_2") 20 | 21 | # просмотр структуры объекта counties: 22 | str(counties) 23 | 24 | # построение карты: 25 | library(mapproj) 26 | ggplot() + geom_map(data = counties, 27 | aes(map_id = id), 28 | map = counties, color = "gray70") + 29 | expand_limits(x = counties$long, 30 | y = counties$lat) + 31 | coord_map("polyconic") 32 | 33 | 34 | # ------------------------------- Рисунок 4.82 --------------------------------- 35 | # объект gadm определен как на рис. 4.81 36 | 37 | set.seed(1234) # для воспроизводимости результата 38 | fake_data <- gadm@data 39 | fake_data$Value <- rnorm(nrow(fake_data)) 40 | 41 | ggplot() + geom_map(data = fake_data, 42 | aes(map_id = NAME_2, fill = Value), 43 | map = counties) + 44 | expand_limits(x = counties$long, y = counties$lat) + 45 | coord_map("polyconic") 46 | 47 | # ------------------------------- Рисунок 4.83 --------------------------------- 48 | library(scales) # для функции muted() (см. ниже) 49 | ggplot() + geom_map(data = fake_data, 50 | aes(map_id = NAME_2, fill = Value), 51 | colour = "gray", map = counties) + 52 | expand_limits(x = counties$long, 53 | y = counties$lat) + 54 | scale_fill_gradient2(low = muted("blue"), 55 | midpoint = 0, 56 | mid = "white", 57 | high = muted("red"), 58 | limits = c(min(fake_data$Value), 59 | max(fake_data$Value))) + 60 | coord_map("polyconic") 61 | 62 | # ------------------------------- Рисунок 4.84 --------------------------------- 63 | ggplot() + geom_map(data = fake_data, 64 | aes(map_id = NAME_2, fill = Value), 65 | colour = "gray", map = counties) + 66 | expand_limits(x = counties$long, y = counties$lat) + 67 | scale_fill_gradient2(low = muted("blue"), 68 | midpoint = 0, mid = "white", 69 | high = muted("red"), 70 | limits = c(min(fake_data$Value), 71 | max(fake_data$Value))) + 72 | coord_map("polyconic") + 73 | theme(axis.line = element_blank(), 74 | axis.text.x = element_blank(), 75 | axis.text.y = element_blank(), 76 | axis.ticks = element_blank(), 77 | axis.title.x = element_blank(), 78 | axis.title.y = element_blank(), 79 | plot.background = element_blank(), 80 | panel.grid.major = element_blank(), 81 | panel.grid.minor = element_blank(), 82 | panel.border = element_blank(), 83 | panel.background = element_blank() ) 84 | 85 | -------------------------------------------------------------------------------- /Scripts/Chapter_5/Section_5_2.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 5.2 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 5.1 ---------------------------------- 9 | ( p <- ggplot(dreissena, aes(Lake, Length)) + geom_boxplot(aes(fill = Month)) ) 10 | p + xlab("Озеро") + ylab("Длина, мм") + scale_fill_discrete("Месяц") 11 | # Команда, аналогичная предыдущей: 12 | p + labs(x = "Озеро", y = "Длина, мм", fill = "Месяц") 13 | 14 | # ------------------------------- Рисунок 5.2 ---------------------------------- 15 | ggplot(subset(dreissena, Lake == "Naroch"), aes(Length, sqrt(Infection))) + 16 | geom_point(alpha = 0.5) 17 | ggplot(subset(dreissena, Lake == "Naroch"), aes(Length, sqrt(Infection))) + 18 | geom_point(alpha = 0.5) + 19 | scale_x_continuous(breaks = c(3, 12, 22)) + 20 | scale_y_continuous(breaks = c(10, 45)) 21 | ggplot(subset(dreissena, Lake == "Naroch"), aes(Length, sqrt(Infection))) + 22 | geom_point(alpha = 0.5) + 23 | scale_x_continuous(breaks = c(3, 12, 22), 24 | labels = c("L1", "L2", "L3")) + 25 | scale_y_continuous(breaks = c(10, 45), 26 | labels = c("L4", "L5")) 27 | 28 | # ------------------------------- Рисунок 5.3 ---------------------------------- 29 | ggplot(dreissena, aes(Lake, Length)) + geom_boxplot() + 30 | scale_x_discrete(labels = abbreviate) 31 | ggplot(dreissena, aes(Lake, Length)) + geom_boxplot() + 32 | scale_y_continuous(breaks = c(5, 15, 25), labels = scientific) 33 | 34 | # ------------------------------- Рисунок 5.4 ---------------------------------- 35 | 36 | -------------------------------------------------------------------------------- /Scripts/Chapter_5/Section_5_3.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 5.3 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 5.4 ---------------------------------- 9 | ggplot(subset(dreissena, Lake == "Naroch"), aes(sqrt(Length), Infection)) + 10 | geom_point(alpha = 0.5) 11 | ggplot(subset(dreissena, Lake == "Naroch"), aes(Length, Infection)) + 12 | geom_point(alpha = 0.5) + 13 | scale_x_continuous(trans = "sqrt") 14 | 15 | # ------------------------------- Рисунок 5.5 ---------------------------------- 16 | library(scales) 17 | ggplot(subset(dreissena, Lake == "Naroch"), aes(Infection)) + 18 | geom_histogram() + 19 | scale_x_continuous(trans = "log") 20 | ggplot(subset(dreissena, Lake == "Naroch"), aes(Infection)) + 21 | geom_histogram() + 22 | scale_x_continuous(trans = "log", 23 | breaks = trans_breaks("log", "exp"), 24 | labels = trans_format("log", math_format(e^.x))) 25 | 26 | # ------------------------------- Рисунок 5.6 ---------------------------------- 27 | ggplot(subset(dreissena, Lake == "Naroch"), 28 | aes(Length, sqrt(Infection))) + geom_point(alpha = 0.5) + 29 | scale_x_continuous(expand = c(0, 0)) 30 | ggplot(subset(dreissena, Lake == "Naroch"), 31 | aes(Length, sqrt(Infection))) + geom_point(alpha = 0.5) + 32 | scale_x_continuous(expand = c(0.5, 0)) 33 | ggplot(subset(dreissena, Lake == "Naroch"), 34 | aes(Length, sqrt(Infection))) + geom_point(alpha = 0.5) + 35 | scale_x_continuous(expand = c(0, 8)) 36 | 37 | # ------------------------------- Рисунок 5.7 ---------------------------------- 38 | ( p <- ggplot(economics, aes(date, psavert/100)) + 39 | geom_line() + scale_y_continuous(labels = percent) + 40 | labs(x = "Year", y = "Personal savings rate") ) 41 | ( p2 <- p + scale_x_date(breaks = date_breaks("5 years"), 42 | labels = date_format("%Y")) ) 43 | 44 | # ------------------------------- Рисунок 5.8 ---------------------------------- 45 | # Пример основан на искусственных данных: 46 | dat <- data.frame(times = 47 | seq(as.POSIXct("2011-10-20 00:00:00"), 48 | as.POSIXct("2011-10-20 23:59:59"), 49 | by = "30 min"), 50 | y = rnorm(48)) 51 | 52 | # Метки делений отражают только время: 53 | (p3 <- ggplot(dat, aes(x = times, y = y)) + geom_line() + 54 | scale_x_datetime(breaks = date_breaks("4 hours"), 55 | labels = date_format("%H:%M:%S"))) 56 | 57 | # Метки делений отражают дату (день) и время: 58 | (p3 + scale_x_datetime(breaks = date_breaks("6 hours"), 59 | labels = date_format("%b%d\n%H:%M:%S"))) 60 | 61 | # ------------------------------- Рисунок 5.9 ---------------------------------- 62 | library(dplyr) # для group_by(), summarise() и %>% 63 | by.lake <- dreissena %>% group_by(Lake) %>% 64 | summarise(Length = round(median(Length)), 65 | Infection = round(median(Infection))) 66 | ggplot(by.lake, aes(Lake, Infection)) + geom_point() + 67 | geom_segment(aes(x = Lake, y = 0, 68 | xend = Lake, 69 | yend = Infection)) 70 | # Изменение порядка расположения уровней переменной Lake 71 | # в соответствии со значениями переменной Length: 72 | ggplot(by.lake, aes(reorder(Lake, Length), Infection)) + 73 | geom_point() + geom_segment(aes(x = Lake, y = 0, 74 | xend = Lake, 75 | yend = Infection)) 76 | 77 | # ------------------------------- Рисунок 5.10 --------------------------------- 78 | (p <- ggplot(dreissena, aes(Lake, Length)) + 79 | geom_boxplot() + 80 | scale_x_discrete(limits = c("Batorino", "Naroch"))) 81 | p + scale_x_discrete(name = "Two Lakes", 82 | limits = c("Batorino", "Naroch"), 83 | labels = c("Batorino" = "B", "Naroch" = "N")) 84 | -------------------------------------------------------------------------------- /Scripts/Chapter_5/Section_5_4.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 5.4 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 5.12 --------------------------------- 9 | library(dplyr) # для filter() и %>% 10 | nar <- dreissena %>% filter(Lake == "Naroch") 11 | 12 | # цвета для низких и высоких значений Day заданы при помощи 13 | # аргументов low и high функции scale_color_gradient(): 14 | ggplot(nar, aes(Length, Infection/1000, colour = Day)) + 15 | geom_point() + 16 | scale_x_continuous(trans = "sqrt") + 17 | scale_y_continuous(trans = "sqrt") + 18 | scale_color_gradient(low = "blue", high = "red") 19 | 20 | # Цвета заливки столбцов гистограммы указаны с использованием 21 | # шестнадцатеричной схемы: 22 | ggplot(nar, aes(Infection/1000, fill = ..count..)) + 23 | geom_histogram() + 24 | scale_x_continuous(trans = "sqrt") + 25 | scale_fill_gradient(low = "#000000", 26 | high = "#FFC0CB") 27 | 28 | # ------------------------------- Рисунок 5.13 --------------------------------- 29 | # Объект nar определен как на предыдущем рисунке 30 | ggplot(nar, aes(Infection/1000, fill = ..count..)) + 31 | geom_histogram() + 32 | scale_x_continuous(trans = "sqrt") + 33 | scale_fill_gradient2(low = "red", 34 | mid = "white", 35 | high = "blue", 36 | midpoint = 10) 37 | ggplot(nar, aes(Infection/1000, fill = ..count..)) + 38 | geom_histogram() + 39 | scale_x_continuous(trans = "sqrt") + 40 | scale_fill_gradientn(colours = terrain.colors(4)) 41 | 42 | # ------------------------------- Рисунок 5.16 --------------------------------- 43 | # Объект nar определен как на рис. 5.12 44 | ( p <- ggplot(nar, aes(Length, Infection/1000, 45 | colour = Month)) + geom_point() + 46 | scale_x_continuous(trans = "sqrt") + 47 | scale_y_continuous(trans = "sqrt") ) 48 | p + scale_color_hue(h = c(200, 360)) 49 | p + scale_color_hue(h = c(200, 360), c = 30) 50 | p + scale_color_hue(h = c(200, 360), c = 30, l = 80) 51 | 52 | # ------------------------------- Рисунок 5.17 --------------------------------- 53 | # Объект nar определен как на рис. 5.12 54 | ggplot(nar, aes(Length, Infection/1000, colour = Month)) + 55 | geom_point() + scale_x_continuous(trans = "sqrt") + 56 | scale_y_continuous(trans = "sqrt") + 57 | scale_colour_brewer(type = "qual", palette = "Set1") 58 | ggplot(nar, aes(Infection/1000, fill = Month)) + 59 | geom_histogram() + 60 | scale_x_continuous(trans = "sqrt") + 61 | scale_fill_brewer(type = "qual", palette = "Accent") 62 | -------------------------------------------------------------------------------- /Scripts/Chapter_5/Section_5_5.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 5.5 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 5.18 --------------------------------- 9 | library(dplyr) # для filter() и %>% 10 | nar <- dreissena %>% filter(Lake == "Naroch", Month %in% c("May", "July")) 11 | p <- ggplot(nar, aes(Length, Infection/1000)) + 12 | geom_point() + scale_x_continuous(trans = "sqrt") + 13 | scale_y_continuous(trans = "sqrt") 14 | p + aes(shape = Month) + scale_shape_manual(values = c(1, 2)) 15 | p + aes(shape = Month, size = Month) + 16 | scale_shape_manual(values = c(1, 2)) + 17 | scale_size_manual(values = c(5, 2)) 18 | 19 | # ------------------------------- Рисунок 5.19 --------------------------------- 20 | # Объекты nar и p определены как на предыдущем рисунке 21 | library(RColorBrewer) 22 | p + aes(colour = Month) + scale_colour_manual(values = c("blue", "pink")) 23 | 24 | # Цвета из палитры Dark2 пакета RColorBrewer: 25 | cols <- brewer.pal(3, "Dark2") 26 | ( p3 <- p + aes(colour = Month) + scale_colour_manual(values = cols) ) 27 | 28 | # ------------------------------- Рисунок 5.20 --------------------------------- 29 | # Объект nar определен как на рис. 5.18 30 | library(dplyr) # для group_by(), summarise() и %>% 31 | by.month <- dreissena %>% group_by(Lake, Month) %>% 32 | summarise(Infection = median(Infection)) 33 | 34 | # Цвета из палитры Set1 пакета RColorBrewer: 35 | cols <- brewer.pal(3, "Set1") 36 | ggplot(by.month, aes(Month, Infection, group = Lake, colour = Lake)) + 37 | geom_point() + 38 | geom_line() + scale_colour_manual(values = cols) 39 | ggplot(nar, aes(Infection, fill = Month)) + 40 | geom_histogram() + scale_fill_manual(values = cols) 41 | 42 | # ------------------------------- Рисунок 5.21 --------------------------------- 43 | # объект by.month определен как на рис. 5.20 44 | by.month$Color <- c(rep("black", 3), rep("red", 3), rep("blue", 3)) 45 | 46 | ggplot(by.month, aes(Month, Infection, group = Lake, colour = Color)) + 47 | geom_point() + geom_line() + 48 | scale_colour_identity(guide = "legend", name = "Lake", 49 | labels = c("Batorino", "Naroch", "Myastro")) 50 | # По умолчанию аргумент guide = "none", т.е. легенда не добавляется 51 | # (для ее включения используется аргумент guide = "legend") 52 | 53 | -------------------------------------------------------------------------------- /Scripts/Chapter_6/Section_6_1.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 6.1 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 6.1 ---------------------------------- 9 | ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 10 | geom_point(alpha = 0.5) + geom_smooth() 11 | ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 12 | geom_point(alpha = 0.5) + geom_smooth() + 13 | coord_cartesian(xlim = c(10, 20), ylim = c(0, 40)) 14 | ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 15 | geom_point(alpha = 0.5) + geom_smooth() + 16 | scale_x_continuous(limits = c(10, 20)) + 17 | scale_y_continuous(limits = c(0, 40)) 18 | 19 | # ------------------------------- Рисунок 6.2 ---------------------------------- 20 | ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 21 | geom_point(alpha = 0.5) + geom_smooth() 22 | ggplot(data = dreissena, aes(sqrt(Infection), Length)) + 23 | geom_point(alpha = 0.5) + geom_smooth() 24 | ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 25 | geom_point(alpha = 0.5) + geom_smooth() + coord_flip() 26 | 27 | # ------------------------------- Рисунок 6.3 ---------------------------------- 28 | p <- ggplot(data = dreissena) + geom_point(alpha = 0.5) 29 | p + aes(Length, sqrt(Infection)) 30 | p + aes(Length, Infection) + 31 | scale_y_continuous(trans = "sqrt") 32 | p + aes(Length, Infection) + coord_trans(y = "sqrt") 33 | 34 | # ------------------------------- Рисунок 6.4 ---------------------------------- 35 | p <- ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 36 | geom_point(alpha = 0.5) 37 | p + coord_fixed(ratio = 1) 38 | p + coord_fixed(ratio = 1.5) 39 | p + coord_fixed(ratio = 0.2) 40 | 41 | -------------------------------------------------------------------------------- /Scripts/Chapter_6/Section_6_2.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 6.2 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 6.5 ---------------------------------- 9 | ( p <- ggplot(data = dreissena, aes(factor(1), fill = Month)) + 10 | geom_bar(width = 1) ) 11 | p + coord_polar(theta = "y") 12 | p + coord_polar(theta = "x") 13 | 14 | # ------------------------------- Рисунок 6.6 ---------------------------------- 15 | library(dplyr) # для summarise() и %>% 16 | dreiss <- dreissena %>% group_by(Lake, Day) %>% 17 | summarise(Length = mean(Length)) 18 | 19 | ggplot(dreissena, aes(x = Lake)) + 20 | geom_bar(width = 1, color = "black", fill = "lightblue") + 21 | coord_polar(theta = "x") 22 | ggplot(dreiss, aes(x = Day, y = Length, color = Lake)) + 23 | geom_line(size = 1) + coord_polar(theta = "x") 24 | ggplot(dreiss, aes(x = Day, y = Length, color = Lake)) + 25 | geom_line(size = 1) + coord_polar(theta = "y") 26 | -------------------------------------------------------------------------------- /Scripts/Chapter_6/Section_6_3.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 6.3 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 6.7 ---------------------------------- 9 | library(maps) # пакет с картами нескольких стран и всего мира 10 | library(mapproj) 11 | it <- map_data("italy") # карта Италии 12 | itmap <- ggplot(it, aes(x = long, y = lat, group = group)) + 13 | geom_polygon(fill = "white", colour = "black") 14 | itmap + coord_map("mercator") 15 | itmap + coord_map("orthographic") 16 | itmap + coord_map("stereographic") 17 | itmap + coord_map("conic", lat0 = 0) 18 | 19 | # ------------------------------- Рисунок 6.8 ---------------------------------- 20 | world <- map_data("world") 21 | worldmap <- ggplot(world, aes(x = long, y = lat, group = group)) + 22 | geom_path() + 23 | scale_y_continuous(breaks = (-2:2) * 30) + 24 | scale_x_continuous(breaks = (-4:4) * 45) 25 | worldmap + coord_map("orthographic") 26 | worldmap + coord_map("orthographic", orientation = c(-90, 0, 0)) 27 | worldmap + coord_map("orthographic", orientation = c(40, 30, 20)) 28 | -------------------------------------------------------------------------------- /Scripts/Chapter_7/Section_7_2.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 7.1 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 7.2 ---------------------------------- 9 | qplot(Length, sqrt(Infection), data = dreissena) + 10 | facet_grid(facets = . ~ Lake) 11 | 12 | # ------------------------------- Рисунок 7.3 ---------------------------------- 13 | qplot(Length, data = dreissena, geom = "histogram") + 14 | facet_grid(Lake ~ .) 15 | # обратите внимание: имя аргумента facets при вызове 16 | # функции facet_grid указывать необязательно 17 | 18 | # ------------------------------- Рисунок 7.4 ---------------------------------- 19 | qplot(Length, sqrt(Infection), data = dreissena) + 20 | facet_grid(Lake ~ Month) 21 | 22 | # ------------------------------- Рисунок 7.5 ---------------------------------- 23 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 24 | facet_grid(facets = Lake ~ Month, margins = TRUE) 25 | 26 | # ------------------------------- Рисунок 7.6 ---------------------------------- 27 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 28 | facet_grid(facets = Lake ~ Month, margins = c("Month")) 29 | 30 | # ------------------------------- Рисунок 7.7 ---------------------------------- 31 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 32 | facet_grid(facets = Lake ~ Month, scales = "free") 33 | 34 | # ------------------------------- Рисунок 7.8 ---------------------------------- 35 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 36 | facet_grid(Lake ~ Month, scales = "free", space = "free") 37 | 38 | # ------------------------------- Рисунок 7.9 ---------------------------------- 39 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 40 | facet_grid(facets = . ~ Lake, labeller = label_both) 41 | 42 | # ------------------------------- Рисунок 7.10 --------------------------------- 43 | dreissena$dummy <- factor(dreissena$Lake, 44 | labels = c("x == frac(x[i], n)", "y == frac(y[i], n)", 45 | "z == frac(z[i], n)")) 46 | qplot(Length, sqrt(Infection), 47 | data = dreissena, alpha = I(0.4)) + 48 | facet_grid(facets = . ~ dummy, labeller = label_parsed) 49 | 50 | -------------------------------------------------------------------------------- /Scripts/Chapter_7/Section_7_3.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 7.3 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунки 7.11 и 7.12 -------------------------- 9 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 10 | facet_wrap(facets = ~ Month, ncol = 1) 11 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 12 | facet_wrap(facets = ~ Month, nrow = 2) 13 | 14 | # ------------------------------- Рисунок 7.13 --------------------------------- 15 | qplot(Length, sqrt(Infection), data = dreissena, alpha = I(0.4)) + 16 | facet_wrap(facets = ~ Lake + Month) 17 | -------------------------------------------------------------------------------- /Scripts/Chapter_8/Section_8_1.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 8.1 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 8.1 ---------------------------------- 9 | p <- ggplot(data = dreissena, aes(Length, sqrt(Infection))) + 10 | geom_point(alpha = 0.5) 11 | p + theme_gray() + ggtitle("theme_gray()") 12 | p + theme_bw() + ggtitle("theme_bw()") 13 | p + theme_light() + ggtitle("theme_light()") 14 | p + theme_linedraw() + ggtitle("theme_linedraw()") 15 | p + theme_minimal() + ggtitle("theme_minimal()") 16 | p + theme_classic() + ggtitle("theme_classic()") 17 | 18 | # ------------------------------- Рисунок 8.2 ---------------------------------- 19 | p <- ggplot(data = dplyr::filter(dreissena, Lake == "Naroch" & Site == "S9"), 20 | aes(Length, sqrt(Infection))) + geom_point(size = 3) 21 | p + theme(panel.border = 22 | element_rect(size = 2, colour = "red")) 23 | p + theme(panel.border = 24 | element_rect(fill = NA, size = 2, colour = "red")) 25 | 26 | # ------------------------------- Рисунок 8.3 ---------------------------------- 27 | # Объект p определен как на рис. 8.2 28 | p + theme(panel.background = 29 | element_rect(fill = "lightblue", color = "red", size = 2)) 30 | p + geom_point(color = "yellow", size = 3) + 31 | theme(panel.background = 32 | element_rect(fill = "black", color = "gray50"), 33 | panel.grid.major = 34 | element_line(color = "gray30", size = 2), 35 | panel.grid.minor = 36 | element_line(linetype = 2, color = "gray30", size = 1)) 37 | 38 | # ------------------------------- Рисунок 8.4 ---------------------------------- 39 | # Объект p определен как на рис. 8.2 40 | pp <- p + theme_minimal() + labs(title = "Заголовок графика", 41 | x = "Подпись оси X", y = "Подпись оси Y") 42 | pp + theme(plot.title = 43 | element_text(size = rel(2), colour = "blue"), 44 | axis.title.x = 45 | element_text(size = 14, color = "red"), 46 | axis.title.y = 47 | element_text(size = 18, color = "green")) 48 | 49 | # ------------------------------- Рисунок 8.5 ---------------------------------- 50 | (bp <- ggplot(data = dreissena, aes(Lake, Length, fill = Month)) + 51 | geom_boxplot() ) 52 | bp + theme(legend.position = "top") 53 | 54 | # ------------------------------- Рисунок 8.6 ---------------------------------- 55 | # Объект bp определен как на рис. 8.5 56 | bpp <- bp + scale_fill_discrete(name = "Месяц:", 57 | labels = c("Май", "Июль", "Сентябрь")) 58 | bpp + theme(legend.title = 59 | element_text(size = 18, colour = "blue"), 60 | legend.text = element_text(size = 14, colour = "red")) 61 | 62 | # ------------------------------- Рисунок 8.7 ---------------------------------- 63 | # Объект bpp определен как на рис. 8.6 64 | bpp + theme(legend.background = 65 | element_rect(colour = "darkblue", size = 2, 66 | fill = "lightblue")) 67 | bpp + theme(legend.background = 68 | element_rect(colour = "darkblue", size = 2, 69 | fill = "lightblue"), legend.margin = unit(1, "cm")) 70 | 71 | # ------------------------------- Рисунок 8.8 ---------------------------------- 72 | # Объект bpp определен как на рис. 8.6 73 | bpp + theme(legend.key = element_blank(), 74 | legend.key.size = unit(2, "cm")) 75 | 76 | # ------------------------------- Рисунок 8.9 ---------------------------------- 77 | ggplot(data = dreissena, aes(Lake, Length)) + 78 | geom_boxplot() + facet_wrap(~Month) + 79 | theme(strip.background = 80 | element_rect(fill = "darkblue", 81 | colour = "yellow", size = 1), 82 | strip.text = element_text(colour = "white", 83 | size = rel(2), face = 3)) 84 | 85 | 86 | # ------------------------------- Рисунок 8.10 --------------------------------- 87 | science_theme <- 88 | theme(axis.line.x = 89 | element_line(size = 1, color = "black"), 90 | axis.line.y = 91 | element_line(size = 1, color = "black"), 92 | axis.title = 93 | element_text(size = rel(1.5), face = "bold"), 94 | axis.text = 95 | element_text(size = rel(1.2), color = "black"), 96 | axis.ticks = 97 | element_line(colour = "black"), 98 | panel.background = 99 | element_rect(fill = "white", colour = NA), 100 | panel.border = 101 | element_rect(fill = NA, colour = NA), 102 | panel.grid.major = 103 | element_line(colour = "grey80", size = 0.5), 104 | panel.grid.minor = element_blank(), 105 | legend.title = 106 | element_text(face = "bold", size = rel(1.2)), 107 | legend.text = element_text(size = rel(1.2)), 108 | legend.key.size = unit(0.8, "cm"), 109 | legend.key = element_blank(), 110 | legend.position = "bottom", 111 | legend.margin = unit(0.5, "cm") 112 | ) 113 | 114 | qplot(x = Lake, y = Length, data = dreissena, fill = Month, geom = "boxplot") + 115 | science_theme 116 | qplot(x = Length, y = sqrt(Infection), 117 | data = dreissena, geom = "point", 118 | colour = Lake) + science_theme 119 | 120 | 121 | # ------------------------------- Рисунок 8.11 --------------------------------- 122 | library(ggthemes) 123 | p <- qplot(x = Length, y = sqrt(Infection), 124 | data = dreissena, geom = "point", 125 | colour = Lake) 126 | p + theme_tufte() + ggtitle("theme_tufte()") 127 | p + theme_economist() + scale_colour_economist() + 128 | ggtitle("theme_economist()") 129 | p + theme_solarized() + scale_colour_solarized("blue") + 130 | ggtitle("theme_solarized()") 131 | p + theme_stata() + scale_colour_stata() + 132 | ggtitle("theme_stata()") 133 | p + theme_excel() + scale_colour_excel() + 134 | ggtitle("theme_excel()") 135 | p + theme_fivethirtyeight() + 136 | scale_color_fivethirtyeight() + 137 | ggtitle("theme_fivethirtyeight()") 138 | 139 | 140 | # ------------------------------- Рисунок 8.12 --------------------------------- 141 | library(ggthemr) 142 | p <- ggplot(dreissena, aes(Length, fill = Lake)) + geom_histogram() 143 | 144 | ggthemr(palette = "flat") 145 | p + ggtitle('pallete = "flat"') + 146 | theme(legend.position = "NA") 147 | 148 | ggthemr(palette = "flat dark") 149 | p + ggtitle('pallete = "flat dark"') + 150 | theme(legend.position = "NA") 151 | 152 | ggthemr(palette = "camoflauge") 153 | p + ggtitle('pallete = "camoflauge"') + 154 | theme(legend.position = "NA") 155 | 156 | ggthemr(palette = "chalk") 157 | p + ggtitle('pallete = "chalk"') + 158 | theme(legend.position = "NA") 159 | 160 | ggthemr(palette = "fresh") 161 | p + ggtitle('pallete = "fresh"') + 162 | theme(legend.position = "NA") 163 | 164 | ggthemr(palette = "sea") 165 | p + ggtitle('pallete = "sea"') + 166 | theme(legend.position = "NA") 167 | 168 | ggthemr_reset() # отмена действия ggthemr() 169 | 170 | # ------------------------------- Рисунок 8.13 --------------------------------- 171 | # Объект p определен как на рис. 8.12 172 | ggthemr(palette = "grape", type = "inner") 173 | p + theme(legend.position = "NA") 174 | ggthemr(palette = "grape", type = "outer") 175 | p + theme(legend.position = "NA") 176 | ggthemr(palette = "grape", type = "outer", spacing = 4) 177 | p + theme(legend.position = "NA") 178 | -------------------------------------------------------------------------------- /Scripts/Chapter_8/Section_8_2.R: -------------------------------------------------------------------------------- 1 | # В этом файле приведены примеры кода из раздела 8.2 книги 2 | # Мастицкий С. Э. (2016) Визуализация данных с помощью ggplot2. - М.: ДМК Пресс 3 | # Во всех примерах предполагается, что пакет ggplot2 уже загружен с помощью 4 | # команды library(ggplot2), а таблица dreissena находится в рабочей среде R 5 | # (см. разд. 1.4) 6 | 7 | 8 | # ------------------------------- Рисунок 8.14 --------------------------------- 9 | t1 <- dplyr::filter(dreissena, Lake == "Naroch") 10 | t2 <- dplyr::filter(dreissena, Lake == "Batorino") 11 | 12 | par(mfrow = c(1, 2)) 13 | plot(t1$Length, sqrt(t1$Infection), main = "Lake Naroch", 14 | xlab = "Length", ylab = "sqrt(Infection)") 15 | plot(t2$Length, sqrt(t2$Infection), main = "Lake Batorino", 16 | xlab = "Length", ylab = "sqrt(Infection)") 17 | 18 | # ------------------------------- Рисунок 8.15 --------------------------------- 19 | tab <- rbind(t1, t2) 20 | tab$Lake <- relevel(tab$Lake, ref = "Naroch") 21 | qplot(data = tab, x = Length, y = sqrt(Infection), 22 | geom = "point", facets = ~ Lake) 23 | 24 | # ------------------------------- Рисунок 8.16 --------------------------------- 25 | library(grid) 26 | a <- qplot(data = t1, x = Length, y = sqrt(Infection), 27 | geom = c("point"), main = "Lake Naroch") 28 | b <- qplot(data = t2, x = Length, fill = Month, 29 | geom = c("histogram"), main = "Lake Batorino") 30 | c <- qplot(data = rbind(t1, t2), x = Month, y = Length, 31 | fill = Lake, geom = "boxplot", main = "Both lakes") 32 | 33 | parentvp <- viewport(layout = grid.layout(2, 2)) 34 | pushViewport(parentvp) 35 | 36 | print(a, vp = viewport(layout.pos.row = 1, 37 | layout.pos.col = c(1:2))) 38 | print(b, vp = viewport(layout.pos.row = 2, 39 | layout.pos.col = 1)) 40 | print(c, vp = viewport(layout.pos.row = 2, 41 | layout.pos.col = 2)) 42 | 43 | # ------------------------------- Рисунок 8.17 --------------------------------- 44 | # объекты а и с определены как на рис. 8.16 45 | subplotvp <- viewport(width = 0.35, height = 0.35, x = 0.65, y = 0.25) 46 | c; print(a + theme_gray(base_size = 9), vp = subplotvp) 47 | 48 | # ------------------------------- Рисунок 8.18 --------------------------------- 49 | # объекты а, b и с определены как на рис. 8.16 50 | library(gridExtra) 51 | grid.arrange(a, b, c, ncol = 2) 52 | 53 | # ------------------------------- Рисунок 8.19 --------------------------------- 54 | mod <- lm(Length ~ Lake * Month, data = rbind(t1, t2)) 55 | grid.table(round(anova(mod), 3)) 56 | 57 | # ------------------------------- Рисунок 8.20 --------------------------------- 58 | # Объект mod определен как на рис. 8.19, # а объект c - как на рис. 8.16 59 | tab <- tableGrob(round(anova(mod), 3)) 60 | grid.arrange(c, tab, ncol = 1) 61 | 62 | --------------------------------------------------------------------------------