Programmering

Tilføj farve til din ggplot2-tekst i R

Ggplot2-pakken er kraftfuld og næsten uendelig tilpasselig, men nogle gange kan små justeringer være en udfordring. Ggtext-pakken sigter mod at forenkle stylingtekst på dine visualiseringer. I denne vejledning gennemgår jeg en tekst-styling-opgave, som jeg så demo på RStudio Conference i sidste måned: tilføjelse af farve.

Hvis du gerne vil følge med, foreslår jeg, at du installerer udviklingsversionen af ​​ggplot2 fra GitHub. Generelt var nogle ting, der blev vist på konferencen, ikke på CRAN endnu. Og ggtext fungerer bestemt ikke med nogle ældre versioner af ggplot.

Du har at installere ggtext fra GitHub, da pakken endnu ikke var på CRAN på det tidspunkt, hvor jeg skrev dette. Jeg bruger fjernbetjeninger :: install_github () at installere R-pakker fra GitHub, selvom flere andre muligheder, f.eks devtools :: install_github (), arbejde også. Bemærk, at i koden nedenfor inkluderer jeg argumentet build_vignettes = SAND så jeg har lokale versioner af pakkevignetter. Derefter indlæser jeg ggplot2, ggtext og dplyr.

fjernbetjeninger :: install_github ("tidyverse / ggplot2", build_vignettes = SAND)

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

bibliotek (ggplot2)

bibliotek (ggtext)

bibliotek (dplyr)

Til demodata bruger jeg data, der sammenligner tweets om R (med hashtagget #rstats) med tweets om Python (#python). Efter at have downloadet nylige tweets, foretog jeg nogle filtreringer, tog en tilfældig prøve på 1.000 af hver og beregnede derefter, hvor mange i hver gruppe, der havde mindst fem likes, havde mindst fem retweets, inkluderet en URL og inkluderede medier som et foto eller video.

Du kan gendanne datasættet med nedenstående kodeblok. Eller du kan bruge ethvert datasæt, der giver mening som et grupperet søjlediagram og ændre min efterfølgende grafkode i overensstemmelse hermed.

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)

Det graf_data datarammen er i et "langt" format: en kolonne til hashtaggen (#rstats eller #python), en for den kategori, jeg måler, og en kolonne for værdierne.

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

Det er typisk den struktur, du ønsker for de fleste ggplot-grafer.

Derefter opretter jeg et grupperet søjlediagram og gemmer det i variablen mit_diagram.

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

geom_col (position = "undvig", alpha = 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 (farve = "grå")) +

scale_fill_manual (værdier = c ("# ff8c00", "# 346299"))

Det alfa = 0,9 på linje to gør stængerne bare lidt gennemsigtige (alfa = 1.0 er fuldstændig uigennemsigtig). De sidste par linjer tilpasser grafens udseende: ved hjælp af det minimale tema, slippe af med etiketterne på x og y-aksen, fjernelse af standardgitterlinjer og indstilling af farver til bjælkerne. Grafen skal se sådan ud, hvis du kører koden og derefter viser den mit_diagram:

Sharon Machlis,

Dernæst tilføjer jeg en titel med denne kode:

mit_diagram +

labs (title = "#python og #rstats: Sammenligning af 1.000 tilfældige tweets")

Sharon Machlis,

Det ser ud . . . OKAY. Men på en separat RStudio-konferencesession, The Glamour of Graphics, fortalte Will Chase os, at legender er mindre end ideelle (selvom han gjorde dette punkt på lidt mere farverigt sprog). Han viste, at tilføjelse af farver lige i grafoverskriften kan forbedre din grafik. Vi kan gøre det ret let med ggtext-pakken.

At kende lidt HTML-styling med in-line CSS vil helt sikkert hjælpe dig med at tilpasse din tekst. I nedenstående kode bruger jeg span-tags til at udskille de dele af teksten, jeg vil påvirke - #python og #rstats. Inden for hvert sæt span tags sætter jeg en stil - specifikt tekstfarve med farve: og derefter hex-værdien af ​​den farve, jeg ønsker. Du kan også bruge tilgængelig farve navne i tillæg til hex-værdier.

mit_diagram +

laboratorier (

title = "#python og

#rstats: Sammenligning af 1.000 tilfældige tweets "

) +

tema(

plot.title = element_markdown ()

)

Bemærk, at der er to dele til styling af tekst med ggtext. Ud over at tilføje min styling til overskriften eller anden tekst, skal jeg tilføje element_markdown () til uanset plotelement har farverne. Jeg gjorde det i ovenstående kode inde i en tema() funktion med plot.title = element_markdown ().

Hvis du kører hele koden indtil nu, skal grafen se sådan ud:

Sharon Machlis,

Jeg finder det dog lidt svært at se farverne i denne overskriftstekst. Lad os tilføje tags for at gøre teksten fed, og lad os også tilføje legend.position = ingen at fjerne forklaringen:

mit_diagram +

laboratorier (

title = "#python og

#statistik: Sammenligning af 1.000 tilfældige tweets "

) +

tema(

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

)

Sharon Machlis,

Hvis jeg vil ændre farven på x-akseteksten, skal jeg tilføje data med disse oplysninger til den dataramme, jeg visualiserer. I den næste kodeblok opretter jeg en kolonne, der tilføjer fed kursiv rød til FiveLikes og FiveRTs kategorimærker og stiler resten som fed kursiv uden at tilføje rød. Jeg øgede også skrifttypens størrelse kun for FiveLikes og FiveRTs. (Jeg ville ikke gøre det på en rigtig graf; jeg gør det kun her for at gøre det lettere at se forskellene mellem de to.)

graf_data%

mutere (

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

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

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

)

Dernæst skal jeg genskabe diagrammet for at bruge den opdaterede dataramme. Den nye diagramkode er stort set den samme som før, men med to ændringer: Min x-akse er nu den nye kategori_med_farve kolonne. Og tilføjede jeg element_markdown () til akse.tekst. x inde i tema() fungere:

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

geom_col (position = "undvig", alpha = 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 (farve = "grå")) +

scale_fill_manual (værdier = c ("# ff8c00", "# 346299")) +

laboratorier (

title = "#python og #statistik: Sammenligning af 1.000 tilfældige tweets "

) +

tema(

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

axis.text.x = element_markdown () # Tilføjet element_markdown () til axis.text.x i temaet

)

Grafen ser nu sådan ud med de første to punkter på x-aksen i rødt:

Sharon Machlis,

Der er mere, du kan gøre med ggtext, såsom at oprette stiliserede tekstfelter og tilføje billeder til akser. Men pakkeforfatter Claus Wilke advarede os på konferencen om ikke at blive for vanvittige. Ggtext-pakken understøtter ikke alle de formateringskommandoer, der er tilgængelige for R Markdown-dokumenter. Du kan tjekke det seneste på ggtext-webstedet.

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