Добавете цвят към вашия ggplot2 текст в R

Пакетът ggplot2 е мощен и почти безкрайно приспособим, но понякога малките ощипвания могат да бъдат предизвикателство. Пакетът ggtext има за цел да опрости стила на текста във вашите визуализации. В този урок ще разгледам една задача за оформяне на текст, която видях демонстрирана на RStudio Conference миналия месец: добавяне на цвят.

Ако искате да продължите, предлагам да инсталирате версията за разработка на ggplot2 от GitHub. Като цяло някои неща, показани на конференцията, все още не бяха на CRAN. И ggtext определено не работи с някои по-стари версии на ggplot.

Вие имате инсталиран ggtext от GitHub, тъй като по това време аз написах това, пакетът все още не е бил на дървен матер. Използвам remotes::install_github()за инсталиране на R пакети от GitHub, въпреки че devtools::install_github()работят и няколко други опции, като например . Имайте предвид, че в кода по-долу включвам аргумента, build_vignettes = TRUEтака че имам локални версии на винетките на пакета. След това зареждам ggplot2, ggtext и dplyr.

отдалечени :: install_github ("tidyverse / ggplot2", build_vignettes = TRUE)

отдалечени :: install_github ("wilkelab / ggtext", build_vignettes = TRUE)

библиотека (ggplot2)

библиотека (ggtext)

библиотека (dplyr)

За демонстрационни данни ще използвам данни, сравняващи туитове за R (с хаштаг #rstats) с туитове за Python (#python). След като изтеглих скорошни туитове, направих филтриране, взех произволна извадка от 1000 от всяка и след това изчислих колко от всяка група имаха поне пет харесвания, имаха поне пет ретуита, включихме URL и включихме медии като снимка или видео.

Можете да пресъздадете набора от данни с кодовия блок по-долу. Или можете да използвате какъвто и да е набор от данни, който има смисъл като групирана диаграма и съответно да промените последващия ми графичен код.

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

Категория <- c ("FiveLikes", "FiveRTs", "HasURL", "HasMedia", "FiveLikes", "FiveRTs", "HasURL", "HasMedia")

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

graph_data <- data.frame (Hashtag, Категория, NumTweets, stringsAsFactors = FALSE)

Рамката с graph_dataданни е във „дълъг“ формат: една колона за хаштага (#rstats или #python), една за категорията, която измервам, и една колона за стойностите.

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

Това обикновено е структурата, която искате за повечето графики на ggplot. 

След това ще създам групирана диаграма и ще я запиша в променливата my_chart.

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

geom_col (позиция = "избягване", алфа = 0,9) +

тема_минимална () +

xlab ("") +

ylab ("") +

тема (panel.grid.major = element_blank (), panel.grid.minor = element_blank (), panel.background = element_blank (), axis.line = element_line (color = "grey")) +

scale_fill_manual (стойности = c ("# ff8c00", "# 346299"))

Вторият alpha = 0.9ред просто прави лентите малко прозрачни ( alpha = 1.0напълно непрозрачни). Последните няколко реда персонализират външния вид на графиката: с помощта на минималната тема, премахване на етикетите на оста x и y, премахване на линиите на мрежата по подразбиране и задаване на цветове за лентите. Графиката трябва да изглежда така, ако стартирате кода и след това покажете my_chart:

Шарън Маклис,

След това ще добавя заглавие с този код:

my_chart +

лаборатории (title = "#python и #rstats: Сравняване на 1000 случайни туитове")

Шарън Маклис,

Изглежда . . . ДОБРЕ. Но на отделна сесия на RStudio Conference, The Glamour of Graphics, Уил Чейс ни каза, че легендите са по-малко от идеални (въпреки че той каза това на малко по-пъстър език). Той показа, че добавянето на цветове точно в заглавието на графиката може да подобри вашата графика. Можем да направим това доста лесно с пакета ggtext.

Познаването на малко HTML стил с вграден CSS определено ще ви помогне да персонализирате текста си. В кода по-долу използвам тагове span за разделяне на частите от текста, които искам да повлияя - #python и #rstats. Във всеки набор от етикети за обхват задавам стил - по-специално цвят на текста с color:и след това шестнадесетичната стойност на цвета, който искам. Можете също да използвате налични имена на цветове в допълнение към шестнадесетичните стойности .

my_chart +

лаборатории (

title = "#python и

#rstats: Сравняване на 1000 случайни туитове "

) +

тема (

plot.title = element_markdown ()

)

Имайте предвид, че има две части за оформяне на текст с ggtext. В допълнение към добавянето на моя стил към заглавието или друг текст, трябва да добавя element_markdown()към какъвто и да е елемент на сюжета с цветовете. Направих това в горния код във theme()функция с plot.title = element_markdown().

Ако стартирате целия код досега, графиката трябва да изглежда така:

Шарън Маклис,

Малко ми е трудно да виждам цветовете в този текст на заглавието. Нека добавим тагове, за да направим текста удебелен, и нека добавим и legend.position = noneда премахнем легендата: 

my_chart +

лаборатории (

title = " #python и

#rstats : Сравняване на 1000 случайни туитове "

) +

тема (

plot.title = element_markdown (), legend.position = "няма"

)

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.