Tambahkan warna pada teks ggplot2 Anda di R

Paket ggplot2 sangat kuat dan hampir dapat disesuaikan tanpa henti, tetapi terkadang perubahan kecil bisa menjadi tantangan. Paket ggtext bertujuan untuk menyederhanakan gaya teks pada visualisasi Anda. Dalam tutorial ini, saya akan membahas satu tugas penataan teks yang saya lihat demo di RStudio Conference bulan lalu: menambahkan warna.

Jika Anda ingin mengikuti, saya sarankan menginstal versi pengembangan ggplot2 dari GitHub. Secara umum, beberapa hal yang ditampilkan di konferensi belum ada di CRAN. Dan ggtext pasti tidak berfungsi dengan beberapa versi ggplot yang lebih lama.

Anda harus menginstal ggtext dari GitHub, karena pada saat saya menulis ini, paket tersebut belum ada di CRAN. Saya menggunakan remotes::install_github()untuk menginstal paket R dari GitHub, meskipun beberapa opsi lain, seperti devtools::install_github(), juga berfungsi. Perhatikan bahwa dalam kode di bawah ini saya menyertakan argumen build_vignettes = TRUEjadi saya memiliki versi lokal dari sketsa paket. Setelah itu, saya memuat ggplot2, ggtext, dan dplyr.

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

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

perpustakaan (ggplot2)

perpustakaan (ggtext)

perpustakaan (dplyr)

Untuk data demo, saya akan menggunakan data yang membandingkan tweet tentang R (dengan hashtag #rstats) dengan tweet tentang Python (#python). Setelah mengunduh tweet baru-baru ini, saya melakukan beberapa pemfilteran, mengambil sampel acak masing-masing 1.000, dan kemudian menghitung berapa banyak di setiap grup yang memiliki setidaknya lima suka, memiliki setidaknya lima retweet, memasukkan URL, dan memasukkan media seperti foto atau video.

Anda dapat membuat ulang kumpulan data dengan blok kode di bawah ini. Atau Anda dapat menggunakan kumpulan data apa pun yang masuk akal sebagai diagram batang yang dikelompokkan dan mengubah kode grafik saya selanjutnya.

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)

The graph_dataframe data adalah dalam “panjang” format: satu kolom untuk hashtag (#rstats atau #python), satu untuk kategori saya mengukur, dan satu kolom untuk nilai-nilai.

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

Biasanya itu adalah struktur yang Anda inginkan untuk kebanyakan grafik ggplot. 

Selanjutnya saya akan membuat diagram batang yang dikelompokkan dan menyimpannya ke variabel my_chart.

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

geom_col (position = "dodge", alpha = 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 = "grey")) +

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

The alpha = 0.9on line dua hanya membuat bar transparan kecil ( alpha = 1.0sepenuhnya buram). Beberapa baris terakhir menyesuaikan tampilan grafik: menggunakan tema minimal, menghilangkan label sumbu x dan y, menghapus garis kisi default, dan mengatur warna untuk batang. Grafik akan terlihat seperti ini jika Anda menjalankan kode dan kemudian menampilkan my_chart:

Sharon Machlis,

Selanjutnya saya akan menambahkan judul dengan kode ini:

my_chart +

labs (title = "#python dan #rstats: Membandingkan 1.000 tweet acak")

Sharon Machlis,

Terlihat . . . BAIK. Tetapi pada sesi Konferensi RStudio yang terpisah, The Glamour of Graphics, Will Chase memberi tahu kami bahwa legenda kurang dari ideal (meskipun dia membuat poin itu dalam bahasa yang sedikit lebih berwarna). Dia menunjukkan bahwa menambahkan warna tepat di judul grafik dapat meningkatkan grafik Anda. Kita dapat melakukannya dengan cukup mudah dengan paket ggtext.

Mengetahui sedikit gaya HTML dengan in-line CSS pasti akan membantu Anda menyesuaikan teks Anda. Pada kode di bawah ini, saya menggunakan tag span untuk memisahkan bagian teks yang ingin saya pengaruhi - #python dan #rstats. Dalam setiap set tag span saya menetapkan gaya - khususnya warna teks color:dan kemudian nilai hex warna yang saya inginkan. Anda juga dapat menggunakan nama warna yang tersedia selain nilai hex .

my_chart +

laboratorium (

title = "#python dan

#rstats: Membandingkan 1.000 tweet acak "

) +

tema(

plot.title = element_markdown ()

)

Perhatikan bahwa ada dua bagian untuk menata teks dengan ggtext. Selain menambahkan gaya saya ke judul atau teks lain, saya perlu menambahkan element_markdown()elemen plot apa pun yang memiliki warna. Saya melakukannya pada kode di atas di dalam theme()fungsi dengan plot.title = element_markdown().

Jika Anda menjalankan semua kode hingga sekarang, grafiknya akan terlihat seperti ini:

Sharon Machlis,

Saya merasa agak sulit untuk melihat warna dalam teks judul ini. Mari tambahkan tag untuk membuat teks tebal, dan mari tambahkan juga legend.position = noneuntuk menghapus legenda: 

my_chart +

laboratorium (

title = " #python dan

#rstats : Membandingkan 1.000 tweet acak "

) +

tema(

plot.title = element_markdown (), legend.position = "tidak ada"

)

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.