Programavimas

Pridėkite spalvą prie „ggplot2“ teksto R

„Ggplot2“ paketas yra galingas ir beveik be galo pritaikomas, tačiau kartais nedideli pakeitimai gali būti iššūkis. „Ggtext“ paketu siekiama supaprastinti vizualizacijų teksto stilių. Šioje pamokoje apžvelgsiu vieną teksto stiliaus užduotį, kurią praėjusį mėnesį mačiau demonstracijoje „RStudio“ konferencijoje: spalvų pridėjimas.

Jei norite sekti toliau, siūlau iš „GitHub“ įdiegti „ggplot2“ kūrimo versiją. Apskritai kai kurie konferencijoje parodyti dalykai dar nebuvo CRAN. „Ggtext“ tikrai neveikia su kai kuriomis senesnėmis „ggplot“ versijomis.

Tu turėti įdiegti „ggtext“ iš „GitHub“, nes tuo metu, kai tai rašiau, paketo dar nebuvo CRAN. aš naudoju pulteliai :: install_github () įdiegti R paketus iš „GitHub“, nors yra keletas kitų parinkčių, pvz devtools :: install_github (), taip pat darbas. Atkreipkite dėmesį, kad į žemiau pateiktą kodą įtraukiu argumentą build_vignettes = TIESA taigi turiu paketinių vinječių vietines versijas. Po to aš įkeliu ggplot2, ggtext ir dplyr.

pulteliai :: install_github ("tidyverse / ggplot2", build_vignettes = TRUE)

pulteliai :: install_github ("wilkelab / ggtext", build_vignettes = TIESA)

biblioteka (ggplot2)

biblioteka (ggtext)

biblioteka (dplyr)

Demo duomenims naudosiu duomenis, kuriuose palyginsiu tweetus apie R (su #rstats hashtag) su tweetais apie Python (#python). Atsisiuntęs naujausius „tweets“, aš šiek tiek filtravau, paėmiau atsitiktinę atranką iš kiekvieno iš jų ir paskaičiavau, kiek kiekvienos grupės žmonių turėjo bent penkis „Patinka“, turėjo bent penkis pakartotinius pranešimus, įtraukė URL ir įtraukė tokią laikmeną kaip nuotrauka ar vaizdo įrašą.

Duomenų rinkinį galite iš naujo sukurti naudodami toliau pateiktą kodų bloką. Arba galite naudoti bet kokį prasmingą duomenų rinkinį kaip sugrupuotą juostinę diagramą ir atitinkamai pakeisti mano tolesnį diagramos kodą.

Hashtag <- c ("# python", "#python", "#python", "#python", "#rstats", "#rstats", "#rstats", "#rstats")

<- c kategorija („FiveLikes“, „FiveRTs“, „HasURL“, „HasMedia“, „FiveLikes“, „FiveRTs“, „HasURL“, „HasMedia“)

NumTweets <- c (179, 74, 604, 288, 428, 173, 592, 293)

graph_data <- data.frame (Hashtag, Category, NumTweets, stringsAsFactors = FALSE)

diagramos_duomenys duomenų rėmelis yra „ilgo“ formato: vienas stulpelis žymėjimui žymėti (#rstats arba #python), vienas kategorijai, kurią vertinu, ir vienas stulpelis reikšmėms.

str (graph_data) 'data.frame': 8 obs. iš 3 kintamųjų: $ Hashtag: chr "#python" "#python" "#python" "#python" ... $ Category: chr "FiveLikes" "FiveRTs" "HasURL" "HasMedia" ... $ NumTweets: num 179 74 604 288 428 173 592 293

Tai dažniausiai yra struktūra, kurios reikia daugumai „ggplot“ grafikų.

Tada sukursiu sugrupuotą juostinę diagramą ir išsaugosiu ją kintamajame my_chart.

my_chart <- ggplot (graph_data, aes (x = Kategorija, y = NumTweets, fill = Hashtag)) +

geom_col (pozicija = "išsisukinėti", alfa = 0,9) +

tema_minimali () +

xlab ("") +

ylab ("") +

tema (panel.grid.major = element_blank (), panel.grid.minor = element_blank (), panel.background = element_blank (), axis.line = element_line (color = "pilka")) +

scale_fill_manual (reikšmės = c ("# ff8c00", "# 346299"))

alfa = 0,9 antroje eilutėje juostos tampa šiek tiek skaidrios (alfa = 1,0 yra visiškai nepermatomas). Paskutinės kelios eilutės pritaiko grafiko išvaizdą: naudodamas minimalią temą, atsikratydamas x ir y ašių etikečių, pašalindamas numatytąsias tinklelio linijas ir nustatydamas juostų spalvas. Diagrama turėtų atrodyti taip, jei paleidžiate kodą ir tada rodote my_chart:

Sharon Machlis,

Tada pridėsiu pavadinimą su šiuo kodu:

my_chart +

laboratorijos (title = "#python and #rstats: 1 000 atsitiktinių tweetų palyginimas")

Sharon Machlis,

Atrodo . . . GERAI. Tačiau atskirame „RStudio“ konferencijos „Glamour of Graphics“ užsiėmime Willas Chase'as mums pasakė, kad legendos yra mažiau nei idealios (nors jis tai pasakė šiek tiek spalvingesne kalba). Jis parodė, kad pridėjus spalvas tiesiai grafiko antraštėje, grafika gali būti patobulinta. Tai galime padaryti gana lengvai naudodami „ggtext“ paketą.

Žinodami šiek tiek HTML stiliaus naudodami tiesioginę CSS, tikrai galėsite pritaikyti savo tekstą. Žemiau esančiame kode naudoju „span“ žymas norimoms paveikti teksto dalims - #python ir #rstats. Kiekviename „span“ žymių rinkinyje nustatau stilių - būtent teksto spalvą su spalva: tada norimos spalvos šešiakampė reikšmė. Taip pat galite naudoti galimas spalvas vardai be to šešiakampės vertės.

my_chart +

laboratorijos (

pavadinimas = "#python ir

#rstats: Palyginkite 1 000 atsitiktinių tweetų "

) +

tema (

plot.title = element_markdown ()

)

Atminkite, kad yra dvi teksto su ggtext formavimo dalys. Be to, kad antraštėje ar kitame tekste pridėčiau savo stilių, turiu pridėti element_markdown () kad ir koks siužeto elementas turėtų spalvų. Aš tai padariau aukščiau esančiame kode, esančiame a tema () funkcija su plot.title = element_markdown ().

Jei iki šiol vykdote visą kodą, diagrama turėtų atrodyti taip:

Sharon Machlis,

Vis dėlto man šiek tiek sunku įžvelgti šio antraštės teksto spalvas. Pridėkime žymas, kad tekstas būtų paryškintas, ir pridėkime legenda.pozicija = nėra Norėdami pašalinti legendą:

my_chart +

laboratorijos (

pavadinimas = "#python ir

#statai: Palyginkite 1 000 atsitiktinių tweetų "

) +

tema (

plot.title = element_markdown (), legend.position = "nėra"

)

Sharon Machlis,

Jei noriu pakeisti x ašies teksto spalvą, turiu prie duomenų, kuriuos vizualizuoju, pridėti duomenis su ta informacija. Kitame kodo bloke sukuriu stulpelį, kuriame „FiveLikes“ ir „FiveRTs“ kategorijų etiketėse pridedama paryškinta kursyvo raudona spalva, o likusios dalys pateikiamos pusjuodžiu kursyvu, nepridėjus raudonos spalvos. Aš taip pat padidinau šrifto dydį tik „FiveLikes“ ir „FiveRT“. (Aš to nedaryčiau realiame grafike; darau tai tik tam, kad būtų lengviau įžvelgti skirtumus tarp jų.)

graph_data%

mutuoti(

category_with_color = ifelse (% kategorija% c („FiveLikes“, „FiveRTs“),

klijai :: klijai ("{Kategorija}"),

klijai :: klijai ("{Kategorija}"))

)

Tada turiu iš naujo sukurti diagramą, kad galėčiau naudoti atnaujintą duomenų rėmelį. Naujasis diagramos kodas dažniausiai yra toks pats kaip anksčiau, tačiau su dviem pakeitimais: „Mano x ašis“ dabar yra nauja category_with_color stulpelį. Ir, pridūriau element_markdown () į ašis.tekstas.x viduje tema () funkcija:

ggplot (graph_data, aes (x = category_with_color, y = NumTweets, fill = Hashtag)) +

geom_col (pozicija = "išsisukinėti", alfa = 0,9) +

tema_minimali () +

xlab ("") +

ylab ("") +

tema (panel.grid.major = element_blank (), panel.grid.minor = element_blank (), panel.background = element_blank (), axis.line = element_line (color = "pilka")) +

scale_fill_manual (reikšmės = c ("# ff8c00", "# 346299")) +

laboratorijos (

pavadinimas = "#python ir #statai: Palyginkite 1 000 atsitiktinių tweetų "

) +

tema (

plot.title = element_markdown (), legend.position = "nėra",

axis.text.x = element_markdown () # Pridėta element_markdown () prie axis.text.x temoje

)

Grafikas dabar atrodo taip, kad pirmieji du elementai x ašyje yra raudonos spalvos:

Sharon Machlis,

Su „ggtext“ galite padaryti daugiau, pavyzdžiui, kurti stilizuotus teksto laukelius ir pridėti vaizdų prie ašių. Tačiau paketo autorius Clausas Wilke'as konferencijoje mus perspėjo, kad nesijaustume per daug. „Ggtext“ paketas nepalaiko visų formatavimo komandų, galimų „R Markdown“ dokumentams. Naujausią informaciją galite sužinoti ggtext svetainėje.

Norėdami gauti daugiau „R“ patarimų, eikite į puslapį „Daugiau su R“ adresu //bit.ly/domorewithR arba grojaraštį „Daugiau su R“ „TECHtalk YouTube“ kanale.