Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

448 рядки
11KB

  1. <!DOCTYPE html>
  2. <html lang="" xml:lang="">
  3. <head>
  4. <title>Introduction ggplot2</title>
  5. <meta charset="utf-8" />
  6. <meta name="author" content="Antoine Neuraz" />
  7. <script src="libs/header-attrs-2.5/header-attrs.js"></script>
  8. <link href="libs/remark-css-0.0.1/default.css" rel="stylesheet" />
  9. <link rel="stylesheet" href="css/my_style.css" type="text/css" />
  10. </head>
  11. <body>
  12. <textarea id="source">
  13. ## ggplot2 implémente la grammaire de la visualisation
  14. ## Les essentiels
  15. ### Data: Données source.
  16. --
  17. ### Geoms: Marques de la visualisation (points, lignes, ...)
  18. --
  19. ### Scales: Echelles de la visualisation (position, taille, couleur,...)
  20. ---
  21. ## ggplot2 implémente la grammaire de la visualisation
  22. ## Les bonus
  23. ### Stats: Opérations de modification des données sources (moyenne, ...)
  24. --
  25. ### Faceting: Découpe le dataset pour créer des sous-graphes
  26. --
  27. ### Coordinates: système de coordonnées de la visualisation
  28. ---
  29. class:
  30. # Architecture d'un graph avec ggplot2
  31. ```r
  32. ggplot(data = &lt;DATA.FRAME&gt;, # chargement des données
  33. aes(x=&lt;VARIABLE1&gt;, # définition des aesthetics (aes)
  34. y=&lt;VARIABLE2&gt;, # = échelles
  35. ...), # grand nombre d'aesthetics existent
  36. ) +
  37. geom_&lt;*&gt;()
  38. ```
  39. ---
  40. # Ressources
  41. ### Reference: [https://ggplot2.tidyverse.org/reference/]()
  42. ### aesthetics: [https://frama.link/tidyverse-aesthetics]()
  43. ---
  44. ## La base
  45. .small[
  46. ```r
  47. data("iris")
  48. ggplot(iris,
  49. aes(x=Sepal.Length,
  50. y=Sepal.Width))
  51. ```
  52. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-2-1.png)&lt;!-- --&gt;
  53. ]
  54. ---
  55. ## Ajouter une geometrie
  56. .small[
  57. ```r
  58. ggplot(iris,
  59. aes(x=Sepal.Length,
  60. y=Sepal.Width)) + # le plus ajoute un layer
  61. * geom_point()
  62. ```
  63. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-3-1.png)&lt;!-- --&gt;
  64. ]
  65. ---
  66. ## Ajouter une géométrie [2]
  67. .small[
  68. ```r
  69. ggplot(iris) +
  70. * geom_point(aes(x=Sepal.Length,
  71. * y=Sepal.Width))
  72. ```
  73. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-4-1.png)&lt;!-- --&gt;
  74. ]
  75. ---
  76. # Ajouter un encodage (aesthetics)
  77. .small[
  78. ```r
  79. ggplot(iris,
  80. aes(x=Sepal.Length,
  81. y=Sepal.Width,
  82. * color = Species)) +
  83. geom_point()
  84. ```
  85. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-5-1.png)&lt;!-- --&gt;
  86. ]
  87. ---
  88. ## Ajouter une 2ème géométrie
  89. .small[
  90. ```r
  91. ggplot(iris,
  92. aes(x=Sepal.Length,
  93. y=Sepal.Width,
  94. color = Species)) +
  95. geom_point() +
  96. * geom_smooth()
  97. ```
  98. ```
  99. ## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
  100. ```
  101. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-6-1.png)&lt;!-- --&gt;
  102. ]
  103. ---
  104. ## Régler les options de la géométrie
  105. .small[
  106. ```r
  107. ggplot(iris,
  108. aes(x=Sepal.Length,
  109. y=Sepal.Width,
  110. color = Species)) +
  111. geom_point() +
  112. * geom_smooth(method='lm', se=FALSE)
  113. ```
  114. ```
  115. ## `geom_smooth()` using formula 'y ~ x'
  116. ```
  117. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-7-1.png)&lt;!-- --&gt;
  118. ]
  119. ---
  120. ## Ajouter une facette
  121. .small[
  122. ```r
  123. ggplot(iris,
  124. aes(x=Sepal.Length,
  125. y=Sepal.Width,
  126. color = Species)) +
  127. geom_point() +
  128. geom_smooth(method='lm', se=FALSE) +
  129. * facet_grid(~Species)
  130. ```
  131. ```
  132. ## `geom_smooth()` using formula 'y ~ x'
  133. ```
  134. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-8-1.png)&lt;!-- --&gt;
  135. ]
  136. ---
  137. ## Régler le thème
  138. .small[
  139. ```r
  140. ggplot(iris,
  141. aes(x=Sepal.Length,
  142. y=Sepal.Width,
  143. color = Species)) +
  144. geom_point() +
  145. geom_smooth(method='lm', se=FALSE) +
  146. facet_grid(~Species) +
  147. * theme_minimal()
  148. ```
  149. ```
  150. ## `geom_smooth()` using formula 'y ~ x'
  151. ```
  152. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-9-1.png)&lt;!-- --&gt;
  153. ]
  154. ---
  155. ## Régler les titres et labels
  156. .small[
  157. ```r
  158. ggplot(iris,
  159. aes(x=Sepal.Length,
  160. y=Sepal.Width,
  161. color = Species)) +
  162. geom_point()+
  163. theme_minimal() +
  164. * labs(title = "Sépales des iris",
  165. * subtitle = "Longueur et largeur des sépales* en fonction de l'espèce",
  166. * x= "Longueur",
  167. * y = "Largeur",
  168. * caption = "* Chacune des pièces du calice de la fleur. / source: Iris dataset"
  169. * )
  170. ```
  171. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-10-1.png)&lt;!-- --&gt;
  172. ]
  173. ---
  174. ## Ajuster la légende
  175. .small[
  176. ```r
  177. ggplot(iris,
  178. aes(x=Sepal.Length,
  179. y=Sepal.Width,
  180. color = Species)) +
  181. geom_point()+
  182. theme_minimal() +
  183. labs(title = "Sépales des iris",
  184. subtitle = "Longueur et largeur des sépales* en fonction de l'espèce",
  185. x= "Longueur",
  186. y = "Largeur",
  187. caption = "* Chacune des pièces du calice de la fleur. / source: Iris dataset"
  188. ) +
  189. * guides(color = guide_legend(title = "Espèce"))
  190. ```
  191. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-11-1.png)&lt;!-- --&gt;
  192. ]
  193. ---
  194. ## Paufiner le thème
  195. .small[
  196. ```r
  197. ggplot(iris,
  198. aes(x=Sepal.Length,
  199. y=Sepal.Width,
  200. color = Species)) +
  201. geom_point()+
  202. theme_minimal() +
  203. labs(title = "Sépales des iris",
  204. subtitle = "Longueur et largeur des sépales* en fonction de l'espèce",
  205. x= "Longueur",
  206. y = "Largeur",
  207. caption = "* Chacune des pièces du calice de la fleur. / source: Iris dataset"
  208. ) +
  209. guides(color = guide_legend(title = "Espèce")) +
  210. * theme(panel.grid.minor = element_blank(),
  211. * legend.position = "bottom")
  212. ```
  213. ![](lab01-ggplot-intro_files/figure-html/unnamed-chunk-12-1.png)&lt;!-- --&gt;
  214. ]
  215. ---
  216. # A l'aide !!!
  217. ### site du tidyverse: [https://ggplot2.tidyverse.org]()
  218. ### R for datascience: [https://r4ds.had.co.nz/]()
  219. ### stackoverfow: [https://stackoverflow.com]()
  220. ### votre moteur de recherche préféré
  221. ---
  222. # TODO
  223. ### Ouvrir le dataset "mtcars"
  224. ### représenter le "Gross horsepower" en fonction du nombre de cylindres
  225. ### utiliser l'encodage multiple sur le nombre de cylindres
  226. ### ajouter l'information du nombre de carburateurs
  227. ### Paufiner le plot (axes, titres, thème)
  228. ---
  229. # TODO 2
  230. ### représenter la distribution du nombre de miles per gallon en histogramme
  231. ### représenter la distribution du nombre de miles per gallon en boxplot
  232. ### representer la distribution du nombre de miles per gallon en fonction du nombre de cylindres
  233. ### ajouter les points par dessus la distribution
  234. ### paufiner le plot (axes, titres, thème)
  235. </textarea>
  236. <style data-target="print-only">@media screen {.remark-slide-container{display:block;}.remark-slide-scaler{box-shadow:none;}}</style>
  237. <script src="https://remarkjs.com/downloads/remark-latest.min.js"></script>
  238. <script src="addons/macros.js"></script>
  239. <script>var slideshow = remark.create({
  240. "ratio": "4:3",
  241. "countIncrementalSlides": false,
  242. "self-contained": true,
  243. "highlightLines": true
  244. });
  245. if (window.HTMLWidgets) slideshow.on('afterShowSlide', function (slide) {
  246. window.dispatchEvent(new Event('resize'));
  247. });
  248. (function(d) {
  249. var s = d.createElement("style"), r = d.querySelector(".remark-slide-scaler");
  250. if (!r) return;
  251. s.type = "text/css"; s.innerHTML = "@page {size: " + r.style.width + " " + r.style.height +"; }";
  252. d.head.appendChild(s);
  253. })(document);
  254. (function(d) {
  255. var el = d.getElementsByClassName("remark-slides-area");
  256. if (!el) return;
  257. var slide, slides = slideshow.getSlides(), els = el[0].children;
  258. for (var i = 1; i < slides.length; i++) {
  259. slide = slides[i];
  260. if (slide.properties.continued === "true" || slide.properties.count === "false") {
  261. els[i - 1].className += ' has-continuation';
  262. }
  263. }
  264. var s = d.createElement("style");
  265. s.type = "text/css"; s.innerHTML = "@media print { .has-continuation { display: none; } }";
  266. d.head.appendChild(s);
  267. })(document);
  268. // delete the temporary CSS (for displaying all slides initially) when the user
  269. // starts to view slides
  270. (function() {
  271. var deleted = false;
  272. slideshow.on('beforeShowSlide', function(slide) {
  273. if (deleted) return;
  274. var sheets = document.styleSheets, node;
  275. for (var i = 0; i < sheets.length; i++) {
  276. node = sheets[i].ownerNode;
  277. if (node.dataset["target"] !== "print-only") continue;
  278. node.parentNode.removeChild(node);
  279. }
  280. deleted = true;
  281. });
  282. })();
  283. (function() {
  284. "use strict"
  285. // Replace <script> tags in slides area to make them executable
  286. var scripts = document.querySelectorAll(
  287. '.remark-slides-area .remark-slide-container script'
  288. );
  289. if (!scripts.length) return;
  290. for (var i = 0; i < scripts.length; i++) {
  291. var s = document.createElement('script');
  292. var code = document.createTextNode(scripts[i].textContent);
  293. s.appendChild(code);
  294. var scriptAttrs = scripts[i].attributes;
  295. for (var j = 0; j < scriptAttrs.length; j++) {
  296. s.setAttribute(scriptAttrs[j].name, scriptAttrs[j].value);
  297. }
  298. scripts[i].parentElement.replaceChild(s, scripts[i]);
  299. }
  300. })();
  301. (function() {
  302. var links = document.getElementsByTagName('a');
  303. for (var i = 0; i < links.length; i++) {
  304. if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) {
  305. links[i].target = '_blank';
  306. }
  307. }
  308. })();
  309. // adds .remark-code-has-line-highlighted class to <pre> parent elements
  310. // of code chunks containing highlighted lines with class .remark-code-line-highlighted
  311. (function(d) {
  312. const hlines = d.querySelectorAll('.remark-code-line-highlighted');
  313. const preParents = [];
  314. const findPreParent = function(line, p = 0) {
  315. if (p > 1) return null; // traverse up no further than grandparent
  316. const el = line.parentElement;
  317. return el.tagName === "PRE" ? el : findPreParent(el, ++p);
  318. };
  319. for (let line of hlines) {
  320. let pre = findPreParent(line);
  321. if (pre && !preParents.includes(pre)) preParents.push(pre);
  322. }
  323. preParents.forEach(p => p.classList.add("remark-code-has-line-highlighted"));
  324. })(document);</script>
  325. <script>
  326. slideshow._releaseMath = function(el) {
  327. var i, text, code, codes = el.getElementsByTagName('code');
  328. for (i = 0; i < codes.length;) {
  329. code = codes[i];
  330. if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) {
  331. text = code.textContent;
  332. if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) ||
  333. /^\$\$(.|\s)+\$\$$/.test(text) ||
  334. /^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) {
  335. code.outerHTML = code.innerHTML; // remove <code></code>
  336. continue;
  337. }
  338. }
  339. i++;
  340. }
  341. };
  342. slideshow._releaseMath(document);
  343. </script>
  344. <!-- dynamically load mathjax for compatibility with self-contained -->
  345. <script>
  346. (function () {
  347. var script = document.createElement('script');
  348. script.type = 'text/javascript';
  349. script.src = 'https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML';
  350. if (location.protocol !== 'file:' && /^https?:/.test(script.src))
  351. script.src = script.src.replace(/^https?:/, '');
  352. document.getElementsByTagName('head')[0].appendChild(script);
  353. })();
  354. </script>
  355. </body>
  356. </html>