Programiranje

Besedilo ggplot2 v R dodajte barvo

Paket ggplot2 je zmogljiv in skoraj neskončno prilagodljiv, včasih pa so lahko majhne prilagoditve izziv. Namen paketa ggtext je poenostaviti oblikovanje besedila na vaših vizualizacijah. V tej vadnici bom opisal eno nalogo za oblikovanje besedila, ki sem jo prejšnji mesec videl na konferenci RStudio: dodajanje barve.

Če bi radi nadaljevali, predlagam, da namestite razvojno različico ggplot2 iz GitHub-a. Na splošno nekatere stvari, prikazane na konferenci, še niso bile na programu CRAN. In ggtext zagotovo ne deluje z nekaterimi starejšimi različicami ggplot.

Ti imeti namestiti ggtext iz GitHub-a, ker v času, ko sem to napisal, paket še ni bil na CRAN-u. jaz uporabljam remotes :: install_github () namestiti R-jeve pakete iz GitHub-a, čeprav še nekaj drugih možnosti, kot je devtools :: install_github (), tudi delo. Upoštevajte, da v spodnjo kodo vključim argument build_vignettes = TRUE tako da imam lokalne različice vinjete paketov. Po tem naložim ggplot2, ggtext in dplyr.

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

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

knjižnica (ggplot2)

knjižnica (ggtext)

knjižnica (dplyr)

Za predstavitvene podatke bom uporabil podatke za primerjavo tweetov o R (s hashtagom #rstats) in tweetov o Pythonu (#python). Po prenosu nedavnih tweetov sem naredil nekaj filtriranja, vzel naključni vzorec po 1000 iz vsakega in nato izračunal, koliko v vsaki skupini je imelo vsaj pet všečkov, imelo je vsaj pet ponovnih tweetov, vključil je URL in vključil medije, kot je fotografija ali video.

Nabor podatkov lahko znova ustvarite s spodnjim kodnim blokom. Lahko pa uporabite kateri koli nabor podatkov, ki je smiseln, kot združeni stolpčni grafikon in ustrezno spremenite mojo naslednjo kodo grafa.

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, Category, NumTweets, stringsAsFactors = FALSE)

The graf_podatki podatkovni okvir je v "dolgi" obliki: en stolpec za hashtag (#rstats ali #python), en za kategorijo, ki jo merim, in en stolpec za vrednosti.

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

To je običajno struktura, ki jo želite za večino grafov ggplot.

Nato ustvarim združeni stolpčni grafikon in ga shranim v spremenljivko my_chart.

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

geom_col (položaj = "dodge", 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 (vrednosti = c ("# ff8c00", "# 346299"))

The alfa = 0,9 v drugi vrstici palice naredijo malo pregledne (alfa = 1,0 je popolnoma neprozorna). Zadnjih nekaj vrstic prilagodi videz grafa: z uporabo minimalne teme, odstranjevanje oznak osi x in y, odstranjevanje privzetih mrežnih linij in nastavitev barv za vrstice. Graf mora biti videti tako, če zaženete kodo in nato prikažete my_chart:

Sharon Machlis,

Nato bom dodal naslov s to kodo:

my_chart +

labs (title = "#python and #rstats: Primerjava 1.000 naključnih tweetov")

Sharon Machlis,

Izgleda . . . V REDU. Toda na ločenem zasedanju konference RStudio, Glamur of Graphics, nam je Will Chase povedal, da so legende manj kot idealne (čeprav je to poudaril v nekoliko bolj pisanem jeziku). Pokazal je, da lahko dodajanje barv neposredno v naslov grafa izboljša vašo grafiko. To lahko storimo dokaj enostavno s paketom ggtext.

Če poznate malo oblikovanja HTML-ja z vrstnim CSS-jem, vam bo zagotovo pomagalo prilagoditi besedilo. V spodnji kodi uporabljam oznake span za odsek delov besedila, na katere želim vplivati ​​- #python in #rstats. Znotraj vsakega nabora oznak razpona nastavim slog - posebej barvo besedila z barva: in nato šestnajstiško vrednost želene barve. Uporabite lahko tudi razpoložljivo barvo imena poleg šestnajstiške vrednosti.

my_chart +

laboratoriji (

title = "#python in

#rstats: Primerjava 1.000 naključnih tweetov "

) +

tema (

plot.title = element_markdown ()

)

Upoštevajte, da sta dva dela za oblikovanje besedila z ggtext. Poleg tega, da dodam svoj slog naslovu ali drugemu besedilu, moram dodati element_markdown () na kateri koli element ploskve ima barve. To sem storil v zgornji kodi znotraj tema () funkcijo z plot.title = element_markdown ().

Če do zdaj izvajate vso kodo, bi moral biti graf videti tako:

Sharon Machlis,

Težko pa vidim barve v tem besedilu naslova. Dodajmo oznake, da bo besedilo krepko, dodajmo pa tudi legend.position = noben da odstranite legendo:

my_chart +

laboratoriji (

title = "#python in

#rstats: Primerjava 1.000 naključnih tweetov "

) +

tema (

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

)

Sharon Machlis,

Če želim spremeniti barvo besedila osi x, moram v podatkovni okvir, ki ga vizualiziram, dodati podatke s temi podatki. V naslednjem bloku kode ustvarim stolpec, ki oznakam kategorij FiveLikes in FiveRTs doda krepko ležeče rdeče, ostale pa oblikuje krepko ležeče brez dodajanja rdeče. Prav tako sem povečal velikost pisave samo za FiveLikes in FiveRT. (Tega ne bi počel na resničnem grafu; tukaj to počnem samo zato, da lažje vidim razlike med njima.)

grafični_podatki%

mutiraj (

category_with_color = ifelse (Kategorija% v% c ("FiveLikes", "FiveRTs"),

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

lepilo :: lepilo ("{Kategorija}"))

)

Nato moram znova ustvariti grafikon, da uporabim posodobljeni podatkovni okvir. Nova koda grafikona je večinoma enaka kot prej, vendar z dvema spremembama: Moja os x je zdaj nova kategorija_z_barvo stolpec. In dodal sem element_markdown () do osi.besedilo.x znotraj tema () funkcija:

ggplot (grafični_podatki, aes (x = kategorija_z_barvo, y = NumTweets, fill = Hashtag)) +

geom_col (položaj = "dodge", 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 (vrednosti = c ("# ff8c00", "# 346299")) +

laboratoriji (

title = "#python in #rstats: Primerjava 1.000 naključnih tweetov "

) +

tema (

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

axis.text.x = element_markdown () # Dodan element_markdown () oseh.text.x v temi

)

Graf je zdaj videti tako, prva dva elementa na osi x sta rdeča:

Sharon Machlis,

Z ggtext lahko storite še več, na primer ustvarjanje stiliziranih besedilnih polj in dodajanje slik na osi. Toda avtor paketov Claus Wilke nas je na konferenci opozoril, naj ne bomo preveč nori. Paket ggtext ne podpira vseh ukazov za oblikovanje, ki so na voljo za dokumente R Markdown. Najnovejše informacije si lahko ogledate na spletnem mestu ggtext.

Za več nasvetov R pojdite na stran Naredite več z R na //bit.ly/domorewithR ali na seznam predvajanja Naredi več z R na kanalu TECHtalk YouTube.

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