Programmering

Legg til farge på ggplot2-teksten din i R

Ggplot2-pakken er kraftig og nesten uendelig tilpassbar, men noen ganger kan små justeringer være en utfordring. Ggtext-pakken tar sikte på å forenkle stylingsteksten på visualiseringene dine. I denne veiledningen vil jeg gå gjennom en tekst-styling-oppgave jeg så demonstrerte på RStudio Conference forrige måned: legge til farge.

Hvis du vil følge med, foreslår jeg at du installerer utviklingsversjonen av ggplot2 fra GitHub. Generelt sett var noen ting som ble vist på konferansen ikke på CRAN ennå. Og ggtext fungerer definitivt ikke med noen eldre versjoner av ggplot.

Du ha for å installere ggtext fra GitHub, siden pakken foreløpig ikke var på CRAN da jeg skrev dette. jeg bruker fjernkontroller :: install_github () å installere R-pakker fra GitHub, selv om flere andre alternativer, for eksempel devtools :: install_github (), fungerer også. Merk at i koden nedenfor inkluderer jeg argumentet build_vignettes = SANT så jeg har lokale versjoner av pakkevignetter. Etter det laster jeg inn ggplot2, ggtext og dplyr.

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

fjernkontroller :: install_github ("wilkelab / ggtext", build_vignettes = TRUE)

bibliotek (ggplot2)

bibliotek (ggtext)

bibliotek (dplyr)

For demodata bruker jeg data som sammenligner tweets om R (med hashtaggen #rstats) med tweets om Python (#python). Etter å ha lastet ned nylige tweets, filtrerte jeg, tok et tilfeldig utvalg på 1000 av hver, og beregnet deretter hvor mange i hver gruppe som hadde minst fem likes, hadde minst fem retweets, inkluderte en URL og inkluderte media som et bilde eller video.

Du kan opprette datasettet på nytt med kodeblokken nedenfor. Eller du kan bruke hvilket som helst datasett som er fornuftig som et gruppert søylediagram og endre den påfølgende grafkoden min deretter.

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

Kategori <- c ("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)

De graph_data datarammen er i et “langt” format: en kolonne for hashtaggen (#rstats eller #python), en for kategorien jeg måler, og en kolonne for verdiene.

str (graph_data) 'data.frame': 8 obs. av 3 variabler: $ Hashtag: chr "#python" "#python" "#python" "#python" ... $ Kategori: chr "FiveLikes" "FiveRTs" "HasURL" "HasMedia" ... $ NumTweets: num 179 74 604 288 428 173592293

Det er vanligvis strukturen du vil ha for de fleste ggplot-grafer.

Deretter oppretter jeg et gruppert søylediagram og lagrer det i variabelen mitt_diagram.

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

geom_col (posisjon = "unnvik", alfa = 0,9) +

tema_minimal () +

xlab ("") +

ylab ("") +

tema (panel.grid.major = element_blank (), panel.grid.minor = element_blank (), panel.background = element_blank (), axis.line = element_line (farge = "grå")) +

skala_fyll_manuell (verdier = c ("# ff8c00", "# 346299"))

De alfa = 0,9 på linje to gjør bare stolpene litt gjennomsiktige (alfa = 1.0 er helt ugjennomsiktig). De siste linjene tilpasser utseendet til grafen: ved å bruke det minimale temaet, bli kvitt etikettene på x og y-aksen, fjerne standard rutenettlinjer og sette farger på stolpene. Grafen skal se slik ut hvis du kjører koden og deretter viser den mitt_diagram:

Sharon Machlis,

Deretter legger jeg til en tittel med denne koden:

my_chart +

labs (title = "#python og #rstats: Sammenligning av 1000 tilfeldige tweets")

Sharon Machlis,

Det ser ut . . . OK. Men på en egen RStudio-konferansesession, The Glamour of Graphics, fortalte Will Chase oss at legender er mindre enn ideelle (selv om han gjorde det poenget på litt mer fargerikt språk). Han viste at å legge til farger rett i grafoverskriften kan forbedre grafikken din. Vi kan gjøre det ganske enkelt med ggtext-pakken.

Å kjenne litt HTML-styling med innebygd CSS vil definitivt hjelpe deg med å tilpasse teksten din. I koden nedenfor bruker jeg spennkoder for å dele av delene av teksten jeg vil påvirke - #python og #rstats. Innenfor hvert sett med spennkoder setter jeg en stil - spesielt tekstfarge med farge: og deretter hexverdien til fargen jeg vil ha. Du kan også bruke tilgjengelig farge navn i tillegg til hex verdier.

my_chart +

laboratorier (

title = "#python og

#rstats: Sammenligning av 1000 tilfeldige tweets "

) +

tema(

plot.title = element_markdown ()

)

Merk at det er to deler til styling av tekst med ggtext. I tillegg til å legge til stylingen i overskriften eller annen tekst, må jeg legge til element_markdown () til hvilket som helst plottelement som har fargene. Jeg gjorde det i ovennevnte kode inne i tema() funksjon med plot.title = element_markdown ().

Hvis du kjører all koden til nå, skal grafen se slik ut:

Sharon Machlis,

Jeg synes det er litt vanskelig å se fargene i denne overskriften. La oss legge til tagger for å gjøre teksten fet, og la oss også legge til legend.position = ingen for å fjerne legenden:

my_chart +

laboratorier (

title = "#python og

#rstats: Sammenligning av 1000 tilfeldige tweets "

) +

tema(

plot.title = element_markdown (), legend.position = "ingen"

)

Sharon Machlis,

Hvis jeg vil endre fargen på x-aksen, må jeg legge til data med den informasjonen i datarammen jeg visualiserer. I neste kodeblokk oppretter jeg en kolonne som legger fet kursiv rød til kategoriene FiveLikes og FiveRTs og stiler resten som fet kursiv uten å legge til rød. Jeg økte også skriftstørrelsen bare for FiveLikes og FiveRTs. (Jeg ville ikke gjøre det på en ekte graf; jeg gjør det her bare for å gjøre det lettere å se forskjellene mellom de to.)

graph_data%

mutere (

category_with_color = ifelse (Kategori% i% c ("FiveLikes", "FiveRTs"),

lim :: lim ("{Kategori}"),

lim :: lim ("{Kategori}"))

)

Deretter må jeg lage kartet på nytt for å bruke den oppdaterte datarammen. Den nye kartkoden er stort sett den samme som før, men med to endringer: Min x-akse er nå den nye kategori_med_farge kolonne. Og, la jeg til element_markdown () til axis.text.x inne i tema() funksjon:

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

geom_col (posisjon = "unnvik", alfa = 0,9) +

tema_minimal () +

xlab ("") +

ylab ("") +

tema (panel.grid.major = element_blank (), panel.grid.minor = element_blank (), panel.background = element_blank (), axis.line = element_line (farge = "grå")) +

skala_fyll_manuell (verdier = c ("# ff8c00", "# 346299")) +

laboratorier (

title = "#python og #rstats: Sammenligning av 1000 tilfeldige tweets "

) +

tema(

plot.title = element_markdown (), legend.position = "none",

axis.text.x = element_markdown () # Lagt element_markdown () til axis.text.x i temaet

)

Grafen ser nå ut slik, med de to første elementene på x-aksen i rødt:

Sharon Machlis,

Det er mer du kan gjøre med ggtext, for eksempel å lage stiliserte tekstbokser og legge til bilder i aksene. Men pakkeforfatter Claus Wilke advarte oss på konferansen om ikke å bli for sprø. Ggtext-pakken støtter ikke alle formateringskommandoer som er tilgjengelige for R Markdown-dokumenter. Du kan sjekke ut det siste på ggtext-nettstedet.

For flere R-tips, gå til Do More With R-siden på //bit.ly/domorewithR eller Do More With R-spillelisten på TECHtalk YouTube-kanalen.

$config[zx-auto] not found$config[zx-overlay] not found