Dodajte boju svom ggplot2 tekstu u R

Paket ggplot2 moćan je i gotovo beskrajno prilagodljiv, ali ponekad mala podešavanja mogu biti izazov. Paket ggtext ima za cilj pojednostaviti oblikovanje teksta na vašim vizualizacijama. U ovom uputstvu proći ću kroz jedan zadatak za oblikovanje teksta koji sam prošlog mjeseca vidio na konferenciji RStudio: dodavanje boje.

Ako želite nastaviti dalje, predlažem instaliranje razvojne verzije ggplot2 s GitHub-a. Općenito, neke stvari prikazane na konferenciji još nisu bile na CRAN-u. A ggtext definitivno ne radi s nekim starijim verzijama ggplota.

Vi morate instalirati ggtext od GitHub, jer u to vrijeme sam napisao to, paket nije bio na cran. Koristim remotes::install_github()za instalaciju R paketa s GitHub-a, iako devtools::install_github()funkcionira i nekoliko drugih opcija, poput . Imajte na umu da u donji kod uključujem argument build_vignettes = TRUEpa imam lokalne verzije vinjeta paketa. Nakon toga učitavam ggplot2, ggtext i dplyr.

daljinski upravljači :: install_github ("tidyverse / ggplot2", build_vignettes = TRUE)

daljinski upravljači :: install_github ("wilkelab / ggtext", build_vignettes = TRUE)

knjižnica (ggplot2)

knjižnica (ggtext)

knjižnica (dplyr)

Za demo podatke koristit ću podatke za usporedbu tweetova o R (s # hashtagom #rstats) s tweetovima o Pythonu (#python). Nakon preuzimanja nedavnih tweetova, malo sam filtrirao, uzeo sam slučajni uzorak od po 1000 od svakog, a zatim izračunao koliko ih je u svakoj grupi imalo najmanje pet lajkova, imalo je najmanje pet proslijeđenih tweetova, uključivalo je URL i medije poput fotografije ili video.

Skup podataka možete ponovno stvoriti pomoću donjeg bloka koda. Ili možete upotrijebiti bilo koji skup podataka koji ima smisla kao grupirani trakasti grafikon i u skladu s tim izmijeniti moj sljedeći kod grafikona.

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

Kategorija <- c ("FiveLikes", "FiveRTs", "HasURL", "HasMedia", "FiveLikes", "FiveRTs", "HasURL", "HasMedia")

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

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

Okvir graph_datapodataka je u "dugačkom" formatu: jedan stupac za hashtag (#rstats ili #python), jedan za kategoriju koju mjerim i jedan stupac za vrijednosti.

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

To je obično struktura koju želite za većinu ggplot grafova. 

Dalje ću stvoriti grupirani trakasti grafikon i spremiti ga u varijablu my_chart.

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

geom_col (pozicija = "izmicanje", alfa = 0,9) +

tema_minimalna () +

xlab ("") +

ylab ("") +

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

scale_fill_manual (vrijednosti = c ("# ff8c00", "# 346299"))

Druga alpha = 0.9linija samo čini šipke malo prozirnima ( alpha = 1.0potpuno je neprozirne). Posljednjih nekoliko redaka prilagođava izgled grafikona: pomoću minimalne teme, uklanjanjem oznaka osi x i y, uklanjanjem zadanih linija mreže i postavljanjem boja za trake. Grafikon bi trebao izgledati ovako ako pokrenete kôd i zatim prikažete my_chart:

Sharon Machlis,

Dalje ću dodati naslov s ovim kodom:

my_chart +

labs (title = "#python and #rstats: Usporedba 1.000 slučajnih tweetova")

Sharon Machlis,

Izgleda . . . U REDU. Ali na zasebnom zasjedanju konferencije RStudio, Glamur grafike, Will Chase rekao nam je da su legende manje od idealne (iako je to istaknuo na malo šarenijem jeziku). Pokazao je da dodavanje boja izravno u naslov grafikona može poboljšati vašu grafiku. To možemo učiniti prilično jednostavno s paketom ggtext.

Poznavanje malo HTML stila s linijskim CSS-om definitivno će vam pomoći da prilagodite tekst. U donjem kodu koristim oznake span kako bih odvojio dijelove teksta na koje želim utjecati - #python i #rstats. Unutar svakog skupa oznaka raspona postavljam stil - posebno boju teksta s, color:a zatim heksadecimalnu vrijednost boje koju želim. Uz heksadecimalne vrijednosti možete koristiti i dostupne nazive boja .

my_chart +

laboratoriji (

title = "#python i

#rstats: Usporedba 1.000 slučajnih tweetova "

) +

tema(

plot.title = element_markdown ()

)

Imajte na umu da postoje dva dijela za oblikovanje teksta ggtextom. Pored dodavanja stajlinga naslovu ili drugom tekstu, moram dodati element_markdown()bilo kojem elementu radnje koji ima boje. To sam učinio u gornjem kodu unutar theme()funkcije sa plot.title = element_markdown().

Ako do sada pokrenete sav kôd, grafikon bi trebao izgledati ovako:

Sharon Machlis,

Ipak, malo mi je teško vidjeti boje u ovom tekstu naslova. Dodajmo oznake kako bismo tekst učinili podebljanim, a dodajmo i legend.position = noneda uklonimo legendu: 

my_chart +

laboratoriji (

title = " #python i

#rstats : Usporedba 1.000 slučajnih tweetova "

) +

tema(

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

)

Sharon Machlis,

If I want to change the color of the x-axis text, I need to add data with that information to the data frame I’m visualizing. In the next code block, I create a column that adds bold italic red to the FiveLikes and FiveRTs category labels and styles the rest as bold italic without adding red. I also increased the size of the font just for FiveLikes and FiveRTs. (I wouldn’t do that on a real graph; I do it here only to make it easier to see the differences between the two.)

graph_data %

mutate(

category_with_color = ifelse(Category %in% c("FiveLikes", "FiveRTs"),

glue::glue("{Category}"),

glue::glue("{Category}"))

)

Next I need to re-create the chart to use the updated data frame. The new chart code is mostly the same as before but with two changes: My x axis is now the new category_with_color column. And, I added element_markdown() to axis.text.x inside the theme() function:

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

geom_col(position="dodge", alpha = 0.9) +

theme_minimal() +

xlab("") +

ylab("") +

theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "grey")) +

scale_fill_manual(values = c("#ff8c00", "#346299")) +

labs(

title = "#python and #rstats: Comparing 1,000 random tweets"

) +

theme(

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

axis.text.x = element_markdown() # Added element_markdown() to axis.text.x in theme

)

The graph now looks like this, with the first two items on the x axis in red:

Sharon Machlis,

There is more you can do with ggtext, such as creating stylized text boxes and adding images to axes. But package author Claus Wilke warned us at the conference not to go too crazy. The ggtext package doesn’t support all of the formatting commands that are available for R Markdown documents. You can check out the latest at the ggtext website.

For more R tips, head to the Do More With R page at //bit.ly/domorewithR or the Do More With R playlist on the  TECHtalk YouTube channel.