{"id":2146,"date":"2018-02-18T20:00:48","date_gmt":"2018-02-18T18:00:48","guid":{"rendered":"https:\/\/webanalyst.ro\/?p=2146"},"modified":"2025-06-22T17:16:22","modified_gmt":"2025-06-22T14:16:22","slug":"ggplot2","status":"publish","type":"post","link":"https:\/\/webanalyst.ro\/blog\/2018\/ggplot2\/","title":{"rendered":"Vizualizarea Datelor din Analytics cu ggplot2"},"content":{"rendered":"<p>ggplot2 este pachetul de vizualizare de date preferat de profesioni\u0219tii \u00een R. Pe baza sa a fost creat \u0219i un pachet numit ggplot pentru Python. Numele s\u0103u vine de la \u201e<strong>Grammar of Graphics<\/strong>\u201d, un concept introdus de Leland Wilkinson \u00een 1999, concept pe care se bazeaz\u0103 \u0219i acest pachet.<\/p>\n<p>ggplot2 pare complicat inclusiv pentru cei care cunosc deja no\u021biuni de scripting \u0219i vizualizare de date \u00een R, pentru c\u0103 are o logic\u0103 diferit\u0103. Mai jos, voi explica simplu cele mai importante no\u021biuni \u0219i cum po\u021bi \u00eencepe s\u0103 \u00ee\u021bi creezi grafice pe baza propriilor date.<\/p>\n<p><!--more--><\/p>\n<h2>Elementele Gramaticii Graficelor<\/h2>\n<p>Gramatica graficelor este un framework potrivit c\u0103ruia grafica este format\u0103 din layere distincte de elemente gramatice.<\/p>\n<p>ggplot2 folose\u0219te acelea\u0219i elemente descrise <span class=\"dia_suggestion w0\" contextmenu=\"true\">\u00een<\/span> \u201eGrammar of Graphics\u201d. Acestea sunt:<\/p>\n<ul>\n<li><strong>Datele<\/strong> \u2013 setul de date folosit pentru vizualizare<\/li>\n<li><strong>Estetica<\/strong> \u2013 scale pe baza c\u0103rora cre\u0103m vizualizarea<\/li>\n<li><strong>Geometria<\/strong> \u2013 elementele vizuale folosite pentru a reprezenta datele<\/li>\n<li><strong>Fa\u021betele<\/strong> \u2013 pentru vizualiz\u0103ri cu mai multe grafice create odat\u0103<\/li>\n<li><strong>Statistica<\/strong> \u2013 elementele statistice ad\u0103ugate pentru mai multe informa\u021bii<\/li>\n<li><strong>Coordonatele<\/strong> \u2013 spa\u021biul \u00een care cre\u0103m geometria<\/li>\n<li><strong>Temele<\/strong> \u2013 toate elementele grafice care nu se bazeaz\u0103 pe date<\/li>\n<\/ul>\n<p>Primele trei din list\u0103, adic\u0103 datele, estetica \u0219i geometria, sunt considerate elemente esen\u021biale, a\u0219a c\u0103 le voi lua pe r\u00e2nd.<\/p>\n<h2>Datele<\/h2>\n<p>Putem importa date dintr-un fi\u0219ier sau direct din instrumentul de analytics. \u00cen cazul acesta, vom folosi pachetul cu care ob\u021binem datele din Google Analytics. Primul pas este s\u0103 \u00eenc\u0103rc\u0103m acest pachet, precum \u0219i ggplot2, pachete pe care le vom folosi \u00een continuare:<\/p>\n<blockquote>\n<pre><code>library(googleAnalyticsR)\n\nlibrary(ggplot2)<\/code><\/pre>\n<\/blockquote>\n<p>Urmeaz\u0103 login-ul \u00een contul Google \u0219i extragerea datelor din analytics:<\/p>\n<blockquote>\n<pre><code>ga_auth()\n\nga &lt;- google_analytics(viewId = \"12345\",\n\n\u00a0 \u00a0 \u00a0date_range = c(\"2017-01-01\", \"2017-12-31\"),\n\n\u00a0 \u00a0 \u00a0metrics = \"users\",\n\n\u00a0 \u00a0 \u00a0dimensions = c(\"date\", \"userType\"),\n\n\u00a0 \u00a0 \u00a0anti_sample = TRUE)<\/code><\/pre>\n<\/blockquote>\n<p>A\u0219adar, acum avem datele pe care le vom folosi \u00een continuare \u00een grafice. Am extras date despre utilizatori \u00een anul 2017, segmentate <span class=\"dia_suggestion w0\" contextmenu=\"true\">\u00een<\/span> <span class=\"dia_suggestion w1\" contextmenu=\"true\">func\u021bie<\/span> de tipul utilizatorilor (New \/ Returning). Nu uita\u021bi s\u0103 schimba\u021bi View ID-ul cu cel din propriul cont de analytics!<\/p>\n<p>Am scris un articol separat despre <a href=\"https:\/\/webanalyst.ro\/blog\/2017\/datele-din-google-analytics-r\/\" target=\"_blank\" rel=\"noopener\">importarea datelor din Google Analytics \u00een R<\/a>. <span class=\"dia_suggestion w0\" contextmenu=\"true\">Func\u021bia<\/span><code> google_analytics<\/code> <span class=\"dia_suggestion w3\" contextmenu=\"true\">\u00eenlocuie\u0219te<\/span> <code>google_analytics_4<\/code>, <span class=\"dia_suggestion w6\" contextmenu=\"true\">folosit\u0103<\/span> <span class=\"dia_suggestion w7\" contextmenu=\"true\">\u00een<\/span> versiunile anterioare de googleAnalyticsR pentru a extrage date <span class=\"dia_suggestion w16\" contextmenu=\"true\">din<\/span> Google Analytics API v4.<\/p>\n<h2>Estetica<\/h2>\n<p>Scriam mai sus c\u0103 este layer-ul \u00een care definim scalele pentru vizualizare. Poate fi vorba de scale precum x \u0219i y, dar \u0219i de culori, marimi, transparen\u021b\u0103, etichete, pozi\u021bii etc.<\/p>\n<p>\u00cen ggplot2, acestea apar ca atribute, cel mai des pentru func\u021bia <code>aes()<\/code>, dar nu numai. <span class=\"dia_suggestion w0\" contextmenu=\"true\">Sunt folosite<\/span> scale pentru a <span class=\"dia_suggestion w5\" contextmenu=\"true\">transforma<\/span> <span class=\"dia_suggestion w6\" contextmenu=\"true\">informa\u021biile<\/span> <span class=\"dia_suggestion w7\" contextmenu=\"true\">\u00een<\/span> detalii estetice <span class=\"dia_suggestion w10\" contextmenu=\"true\">\u00een<\/span> grafic. Vom vedea mai jos exemple.<\/p>\n<h2>Geometria<\/h2>\n<p>Se refer\u0103 la modul \u00een care reprezent\u0103m datele. Sunt zeci de elemente geometrice din care putem alege, de la puncte \u0219i linii la hexagoane \u0219i poligoane neregulate. Desigur, se pot crea \u0219i combuna\u021bii \u00eentre acestea.<\/p>\n<p>Haide\u021bi s\u0103 vedem un exemplu din combina\u021biile de p\u00e2n\u0103 acum:<\/p>\n<blockquote>\n<pre><code>ggplot(ga, aes(x = date, y=users, color=userType)) + \n     geom_point(alpha=0.5) + geom_smooth(se = FALSE)<\/code><\/pre>\n<\/blockquote>\n<p>Avem ggplot, fun\u021bia principal\u0103 din pachetul de vizualizare a datelor. \u00cencepem cu <span style=\"text-decoration: underline;\">datele<\/span>, \u00een cazul nostru numite <em>ga<\/em> anterior (c\u00e2nd le-am importat). Urmeaz\u0103 <span style=\"text-decoration: underline;\">estetica<\/span>, cu argumentul <code>aes()<\/code>, \u00een cadrul c\u0103rora am definit afi\u0219area datelor calendaristice pe scala x, a utlizatorilor pe scala y \u0219i colorarea lor \u00een func\u021bie de tipul de utilizator (New \/ Returning).<\/p>\n<p>Dup\u0103 date \u0219i estetic\u0103 avem, bine\u00een\u021beles, <span style=\"text-decoration: underline;\">geometria<\/span>, pentru care am ales s\u0103 afi\u0219eze dou\u0103 elemente. Primul este <em>geom_point<\/em> pentru punctele care indic\u0103 num\u0103rul utilizatorilor. Acel alpha indic\u0103 o transparen\u021b\u0103, aleas\u0103 \u00een acest caz la 50%. Al doilea element grafic este <em>geom_smooth<\/em> \u0219i traseaz\u0103 linii pentru tendin\u021be. Pentru a nu \u00eenc\u0103rca graficul, am ales s\u0103 nu afi\u0219eze \u0219i intervalul de confiden\u021bialitate, prin argumentul setat ca fals.<\/p>\n<p>Rezultatul func\u021biei de mai sus:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2147\" src=\"https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2018\/02\/ggplot-user-type.jpeg\" alt=\"\" width=\"900\" height=\"578\" srcset=\"https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2018\/02\/ggplot-user-type.jpeg 900w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2018\/02\/ggplot-user-type-150x96.jpeg 150w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2018\/02\/ggplot-user-type-300x193.jpeg 300w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2018\/02\/ggplot-user-type-768x493.jpeg 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>Am putea spune ca avem un grafic standard pentru ggplot2. Observ\u0103m leganda pus\u0103 automat, pentru c\u0103 nu am specificat altceva.<\/p>\n<p>Unul dintre avantajele ggplot2 este flexibilitatea. Putem face rapid modific\u0103ri \u00eentr-un vizualiz\u0103rile de date. Urm\u0103toarea fuc\u021bie pentru crearea unei <span class=\"dia_suggestion_done w0\" contextmenu=\"true\"><span class=\"dia_suggestion w0\" contextmenu=\"true\">vizualiz\u0103ri<\/span><\/span> este asem\u0103n\u0103toare cu cea anterioar\u0103:<\/p>\n<blockquote>\n<pre><code>ggplot(ga, aes(x = date, y=users, col=userType)) + geom_point(alpha=0.5) +\n\n\u00a0 \u00a0 \u00a0geom_smooth() + facet_grid(. ~ userType) +\n\n\u00a0 \u00a0 \u00a0theme(panel.background = element_blank(),\n\n\u00a0 \u00a0 \u00a0axis.text = element_blank(), legend.position=\"none\",\n\n\u00a0 \u00a0 \u00a0axis.title=element_blank(), axis.ticks=element_blank())<\/code><\/pre>\n<\/blockquote>\n<p>Datele, estetica \u0219i geometriile sunt acelea\u0219i. OK, avem o mic\u0103 schimbare la <code>geom_smooth<\/code>, pentru c\u0103 acum am l\u0103sat \u0219i intervalele de confiden\u021bialitate, dar este singura schimbare p\u00e2n\u0103 aici. Mai departe, am ad\u0103ugat un layer nou prin\u00a0<code>facet_grid<\/code> pentru a introduce <span style=\"text-decoration: underline;\">fa\u021betarea<\/span> pe coloane, adic\u0103 2 grafice diferite, pentru New \u0219i Returning Visitors.<\/p>\n<p>\u00cen final, am introdus \u0219i un layer <code>theme()<\/code> pentru <span style=\"text-decoration: underline;\">elemente grafice care nu <span class=\"dia_suggestion_done w0\" contextmenu=\"true\"><span class=\"dia_suggestion w0\" contextmenu=\"true\">reprezint\u0103<\/span><\/span> date<\/span>. Aici am decis s\u0103 \u0219terg fundalul, legenda, titlul axelor \u0219i chiar axele, pentru c\u0103 \u0219tim deja aceste informa\u021bii. Rezultatul este vizualizarea de la \u00eenceputul articolului (deasupra titlului). <span class=\"dia_suggestion_done w0\" contextmenu=\"true\"><span class=\"dia_suggestion w0\" contextmenu=\"true\">Tema<\/span> poate <span class=\"dia_suggestion w2\" contextmenu=\"true\"><span class=\"dia_suggestion w7\" contextmenu=\"true\">fi<\/span><\/span> <span class=\"dia_suggestion w3\" contextmenu=\"true\">salvat\u0103<\/span> pentru a <span class=\"dia_suggestion w6\" contextmenu=\"true\">putea<\/span> fi <span class=\"dia_suggestion w8\" contextmenu=\"true\">folosit\u0103<\/span> ulterior <span class=\"dia_suggestion w10\" contextmenu=\"true\">f\u0103r\u0103<\/span> a <span class=\"dia_suggestion w12\" contextmenu=\"true\">mai<\/span> defini fiecare element <span class=\"dia_suggestion w16\" contextmenu=\"true\">\u00een<\/span> <span class=\"dia_suggestion w17\" contextmenu=\"true\">parte<\/span>. De altfel, <span class=\"dia_suggestion w20\" contextmenu=\"true\">marile<\/span> <span class=\"dia_suggestion w21\" contextmenu=\"true\">organiza\u021bii<\/span> folosesc <span class=\"dia_suggestion w23\" contextmenu=\"true\">c\u00e2te<\/span> o\u00a0<span class=\"dia_suggestion w25\" contextmenu=\"true\">tem\u0103<\/span> proprie <span class=\"dia_suggestion w27\" contextmenu=\"true\">la<\/span> <span class=\"dia_suggestion w28\" contextmenu=\"true\">care<\/span> <span class=\"dia_suggestion w29\" contextmenu=\"true\">apeleaz\u0103<\/span> <span class=\"dia_suggestion w30\" contextmenu=\"true\">to\u021bi<\/span> <span class=\"dia_suggestion w31\" contextmenu=\"true\">anali\u0219tii<\/span> interni <span class=\"dia_suggestion w33\" contextmenu=\"true\">c\u00e2nd<\/span> au de creat <span class=\"dia_suggestion w37\" contextmenu=\"true\">vizualiz\u0103ri<\/span> de date.<\/span><\/p>\n<p>De fiecare dat\u0103 c\u00e2nd scriu un articol de genul acesta prefer s\u0103 \u021bin lucrurile c\u00e2t mai simple cu putin\u021b\u0103. ggplot2 este mult mai complex, cu o mul\u021bime de op\u021biuni estetice \u0219i multe alte tipuri de grafice. Exist\u0103 \u00eenclusiv op\u021biuni pentru crearea de h\u0103r\u021bi \u0219i de anima\u021bii. Acolo unde nu este suficient ce ofer\u0103 ggplot2, avem la dispozi\u021bie \u0219i extensii pentru acesta, adic\u0103 alte pachete care extind tipurile de grafice posibile, temele, h\u0103r\u021bile, anima\u021biile etc. Despre acestea, \u00eentr-un articol viitor.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ggplot2 este pachetul de vizualizare de date preferat de profesioni\u0219tii \u00een R. Pe baza sa a fost creat \u0219i un pachet numit ggplot pentru Python. Numele s\u0103u vine de la \u201eGrammar of Graphics\u201d, un concept introdus de Leland Wilkinson \u00een 1999, concept pe care se bazeaz\u0103 \u0219i acest pachet. ggplot2 pare complicat inclusiv pentru cei [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2148,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,12],"tags":[850,845,843,844],"class_list":["post-2146","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","category-technical","tag-ggplot2","tag-googleanalyticsr","tag-r","tag-r-studio"],"_links":{"self":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/2146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/comments?post=2146"}],"version-history":[{"count":17,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/2146\/revisions"}],"predecessor-version":[{"id":4083,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/2146\/revisions\/4083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/media\/2148"}],"wp:attachment":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/media?parent=2146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/categories?post=2146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/tags?post=2146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}