Programování

Přidejte barvu do svého ggplot2 textu v R.

Balíček ggplot2 je výkonný a téměř nekonečně přizpůsobitelný, ale někdy mohou být malé vylepšení výzvou. Balíček ggtext si klade za cíl zjednodušit styling textu ve vašich vizualizacích. V tomto tutoriálu projdu jedním úkolem stylingu textů, který jsem minulý měsíc viděl na konferenci RStudio: ukázka barvy.

Pokud byste chtěli pokračovat, navrhuji nainstalovat vývojovou verzi ggplot2 z GitHubu. Obecně platí, že některé věci zobrazené na konferenci ještě nebyly na CRANu. A ggtext rozhodně nefunguje s některými staršími verzemi ggplot.

Vy mít nainstalovat ggtext z GitHubu, protože v době, kdy jsem to psal, balíček ještě nebyl na CRANu. používám remotes :: install_github () nainstalovat balíčky R z GitHubu, i když několik dalších možností, například devtools :: install_github (), pracovat také. Všimněte si, že v kódu níže zahrnu argument build_vignettes = PRAVDA takže mám místní verze viněty balíčku. Poté načtím ggplot2, ggtext a dplyr.

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

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

knihovna (ggplot2)

knihovna (ggtext)

knihovna (dplyr)

Pro ukázková data použiji data porovnávající tweety o R (s hashtagem #rstats) s tweety o Pythonu (#python). Po stažení nedávných tweetů jsem provedl nějaké filtrování, vzal jsem náhodný vzorek 1000 z každého a poté vypočítal, kolik v každé skupině mělo alespoň pět lajků, mělo alespoň pět retweetů, zahrnovalo adresu URL a zahrnovalo média jako fotografii nebo video.

Sadu dat můžete znovu vytvořit pomocí bloku kódu níže. Nebo můžete použít libovolnou datovou sadu, která má smysl, jako seskupený sloupcový graf a podle toho upravit můj následující kód grafu.

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

Kategorie <- 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 graph_data datový rámec je v „dlouhém“ formátu: jeden sloupec pro hashtag (#rstats nebo #python), jeden pro kategorii, kterou měřím, a jeden sloupec pro hodnoty.

str (graph_data) 'data.frame': 8 obs. ze 3 proměnných: $ Hashtag: chr "#python" "#python" "#python" "#python" ... $ Kategorie: chr "FiveLikes" "FiveRTs" "HasURL" "HasMedia" ... $ NumTweets: num 179 74 604 288 428 173 592 293

To je obvykle struktura, kterou chcete pro většinu grafů ggplot.

Dále vytvořím seskupený sloupcový graf a uložím jej do proměnné my_chart.

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

geom_col (position = "dodge", alpha = 0,9) +

téma_minimální () +

xlab ("") +

ylab ("") +

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

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

The alfa = 0,9 na druhém řádku jsou pruhy trochu průhledné (alfa = 1,0 je zcela neprůhledný). Posledních několik řádků upravuje vzhled grafu: použití minimálního motivu, odstranění štítků osy x a y, odstranění výchozích čar mřížky a nastavení barev pro pruhy. Graf by měl vypadat takto, pokud spustíte kód a poté jej zobrazíte my_chart:

Sharon Machlis,

Dále přidám název s tímto kódem:

my_chart +

laboratoře (title = "#python a #rstats: Porovnání 1 000 náhodných tweetů")

Sharon Machlis,

To vypadá . . . OK. Ale na samostatném zasedání konference RStudio, The Glamour of Graphics, nám Will Chase řekl, že legendy jsou méně než ideální (i když to uvedl trochu barevnějším jazykem). Ukázal, že přidání barev přímo do nadpisu grafu může zlepšit vaši grafiku. Můžeme to udělat docela snadno pomocí balíčku ggtext.

Znalost malého HTML stylu s in-line CSS vám určitě pomůže přizpůsobit text. V níže uvedeném kódu používám značky span k oddělení částí textu, které chci ovlivnit - #python a #rstats. V každé sadě značek rozpětí jsem nastavil styl - konkrétně barvu textu s barva: a potom hexadecimální hodnota barvy, kterou chci. Můžete také použít dostupnou barvu jména navíc hexadecimální hodnoty.

my_chart +

laboratoře (

title = "#python a

#rstats: Porovnání 1 000 náhodných tweetů “

) +

téma(

plot.title = element_markdown ()

)

Všimněte si, že styling textu pomocí ggtext má dvě části. Kromě přidání mého stylu do nadpisu nebo jiného textu musím přidat element_markdown () na jakýkoli prvek grafu má barvy. Udělal jsem to ve výše uvedeném kódu uvnitř a téma() funkce s plot.title = element_markdown ().

Pokud dosud spouštíte celý kód, měl by graf vypadat takto:

Sharon Machlis,

Zdá se mi však trochu těžké vidět barvy v tomto textu nadpisu. Pojďme přidat značky, aby byl text tučný. Pojďme také přidat legend.position = none odstranit legendu:

my_chart +

laboratoře (

title = "#krajta a

#rstats: Porovnání 1 000 náhodných tweetů “

) +

téma(

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

)

Sharon Machlis,

Pokud chci změnit barvu textu na ose x, musím přidat data s těmito informacemi do datového rámce, který vizualizuji. V dalším bloku kódu vytvořím sloupec, který přidá tučnou kurzívu červenou na štítky kategorie FiveLikes a FiveRTs a styly zbytek jako tučné kurzíva bez přidání červené. Také jsem zvětšil velikost písma jen pro FiveLikes a FiveRTs. (Neudělal bych to na skutečném grafu; dělám to jen proto, abych lépe viděl rozdíly mezi těmito dvěma.)

graph_data%

mutovat(

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

lepidlo :: lepidlo ("{Kategorie}"),

lepidlo :: lepidlo ("{Kategorie}"))

)

Dále musím znovu vytvořit graf, abych použil aktualizovaný datový rámec. Nový kód grafu je většinou stejný jako dříve, ale se dvěma změnami: Moje osa x je nyní nová kategorie_barvou sloupec. A dodal jsem element_markdown () na axis.text.x uvnitř téma() funkce:

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

geom_col (position = "dodge", alpha = 0,9) +

téma_minimální () +

xlab ("") +

ylab ("") +

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

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

laboratoře (

title = "#krajta a #rstats: Porovnání 1 000 náhodných tweetů “

) +

téma(

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

axis.text.x = element_markdown () # Přidáno element_markdown () do axis.text.x v motivu

)

Graf nyní vypadá takto, přičemž první dvě položky na ose x jsou červené:

Sharon Machlis,

S ggtextem můžete dělat více, například vytvářet stylizovaná textová pole a přidávat obrázky k osám. Autor balíčku Claus Wilke nás ale na konferenci varoval, abychom se příliš nezbláznili. Balíček ggtext nepodporuje všechny příkazy formátování, které jsou k dispozici pro dokumenty R Markdown. Nejnovější informace si můžete prohlédnout na webových stránkách ggtext.

Další tipy R najdete na stránce Do More With R na adrese //bit.ly/domorewithR nebo v playlistu Do More With R na kanálu TECHtalk na YouTube.

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