R'deki ggplot2 metninize renk ekleyin

Ggplot2 paketi güçlüdür ve neredeyse sonsuz şekilde özelleştirilebilir, ancak bazen küçük değişiklikler zor olabilir. Ggtext paketi, görselleştirmelerinizdeki metin stilini basitleştirmeyi amaçlamaktadır. Bu eğitimde, geçen ay RStudio Konferansında gördüğüm bir metin şekillendirme görevinin üzerinden geçeceğim: renk ekleme.

Devam etmek isterseniz, ggplot2'nin geliştirme sürümünü GitHub'dan yüklemenizi öneririm. Genel olarak, konferansta gösterilen bazı şeyler henüz CRAN'da değildi. Ve ggtext kesinlikle ggplot'un bazı eski sürümleriyle çalışmaz.

Sen var ben yazdım anda, paket CRAN henüz değildi çünkü GitHub ggtext yükleyin. remotes::install_github()GitHub'dan R paketlerini yüklemek için kullanıyorum , ancak gibi diğer birkaç seçenek devtools::install_github()de çalışıyor. Aşağıdaki koda argümanı dahil ettiğime dikkat edin, build_vignettes = TRUEböylece paket vinyetlerinin yerel sürümlerine sahibim. Bundan sonra ggplot2, ggtext ve dplyr yüklerim.

remotes :: install_github ("tidyverse / ggplot2", build_vignettes = DOĞRU)

remotes :: install_github ("wilkelab / ggtext", build_vignettes = DOĞRU)

kütüphane (ggplot2)

kütüphane (ggtext)

kütüphane (dplyr)

Demo verileri için, R ile ilgili tweet'leri (#rstats hashtag'iyle) Python (#python) ile ilgili tweet'lerle karşılaştıran verileri kullanacağım. Son tweetleri indirdikten sonra, biraz filtreleme yaptım, her bir gruptan rastgele 1000 örnek aldım ve ardından her gruptan kaçının en az beş beğeni aldığını, en az beş retweet olduğunu, bir URL ekledim ve bir fotoğraf veya video.

Aşağıdaki kod bloğu ile veri setini yeniden oluşturabilirsiniz. Veya gruplanmış bir çubuk grafik olarak anlamlı olan herhangi bir veri kümesini kullanabilir ve sonraki grafik kodumu buna göre değiştirebilirsiniz.

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)

graph_dataHashtag'in (#rstats veya #python), bir ölçme ediyorum kategori için bir ve değerler için bir sütun için bir sütun: veri çerçevesi bir “uzun” biçiminde olan.

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

Bu genellikle çoğu ggplot grafiği için istediğiniz yapıdır. 

Daha sonra gruplanmış bir çubuk grafik oluşturacağım ve bunu değişkene kaydedeceğim my_chart.

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

geom_col (konum = "kaçma", alfa = 0,9) +

theme_minimal () +

xlab ("") +

ylab ("") +

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

scale_fill_manual (değerler = c ("# ff8c00"; "# 346299"))

İkinci alpha = 0.9satır, çubukları biraz şeffaf hale getirir ( alpha = 1.0tamamen opaktır). Son birkaç satır, grafiğin görünümünü özelleştirir: minimal temayı kullanmak, x ve y ekseni etiketlerinden kurtulmak, varsayılan ızgara çizgilerini kaldırmak ve çubuklar için renkleri ayarlamak. Kodu çalıştırıp ardından şunu görüntülerseniz grafik şöyle görünmelidir my_chart:

Sharon Machlis,

Sonra bu kodla bir başlık ekleyeceğim:

my_chart +

labs (title = "#python ve #rstats: 1000 rastgele tweet'i karşılaştırma")

Sharon Machlis,

Görünüyor. . . TAMAM. Ancak ayrı bir RStudio Konferansı oturumunda, The Glamour of Graphics, Will Chase bize efsanelerin idealden daha az olduğunu söyledi (bu noktayı biraz daha renkli bir dille belirtmesine rağmen). Doğrudan grafik başlığına renk eklemenin grafiklerinizi iyileştirebileceğini gösterdi. Bunu ggtext paketi ile oldukça kolay bir şekilde yapabiliriz.

Satır içi CSS ile küçük bir HTML stili bilmek kesinlikle metninizi özelleştirmenize yardımcı olacaktır. Aşağıdaki kodda, metnin etkilemek istediğim kısımlarını - #python ve #rstats - ayırmak için span etiketlerini kullanıyorum. Her bir aralık etiketi kümesi içinde bir stil belirledim - özellikle metin rengini color:ve ardından istediğim rengin onaltılık değerini. Onaltılık değerlere ek olarak mevcut renk adlarını da kullanabilirsiniz .

my_chart +

laboratuvarlar (

title = "#python ve

#rstats: 1000 rastgele tweet'i karşılaştırma "

) +

tema(

plot.title = element_markdown ()

)

Ggtext ile metne stil vermenin iki bölümü olduğunu unutmayın. Stilimi başlığa veya başka bir metne eklemeye ek olarak element_markdown(), renklere sahip çizim öğelerine de eklemem gerekiyor . Bunu yukarıdaki kodda bir theme()fonksiyonun içinde yaptım plot.title = element_markdown().

Şimdiye kadar tüm kodu çalıştırırsanız, grafik şöyle görünmelidir:

Sharon Machlis,

Yine de bu başlık metnindeki renkleri görmeyi biraz zor buluyorum. En ekleyelim metin kalın yapmak ve en ayrıca ekleyelim etiketleri legend.position = noneefsaneyi kaldırmak için: 

my_chart +

laboratuvarlar (

title = " #python ve

#rstats : 1000 rastgele tweet'i karşılaştırma "

) +

tema(

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

)

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.