Tambahkan warna pada teks ggplot2 anda dalam R

Pakej ggplot2 hebat dan hampir tidak dapat disesuaikan, tetapi kadang-kadang tweak kecil boleh menjadi cabaran. Pakej ggtext bertujuan untuk mempermudah gaya teks pada visualisasi anda. Dalam tutorial ini, saya akan membahas satu tugas menggayakan teks yang saya lihat demo di RStudio Conference bulan lalu: menambah warna.

Sekiranya anda ingin mengikuti, saya cadangkan memasang versi pengembangan ggplot2 dari GitHub. Secara umum, beberapa perkara yang ditunjukkan pada persidangan itu belum ada di CRAN. Dan ggtext pasti tidak berfungsi dengan beberapa versi ggplot yang lebih lama.

Anda mesti memasang ggtext dari GitHub, kerana pada masa saya menulis ini, pakej itu belum ada di CRAN. Saya gunakan remotes::install_github()untuk memasang pakej R dari GitHub, walaupun beberapa pilihan lain, seperti devtools::install_github(), berfungsi juga. Perhatikan bahawa dalam kod di bawah ini saya sertakan hujah build_vignettes = TRUEsehingga saya mempunyai versi skrip pakej tempatan. Selepas itu, saya memuat ggplot2, ggtext, dan dplyr.

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

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

perpustakaan (ggplot2)

perpustakaan (ggtext)

perpustakaan (dplyr)

Untuk data demo, saya akan menggunakan data membandingkan tweet mengenai R (dengan hashtag #rstats) dengan tweet mengenai Python (#python). Setelah memuat turun tweet baru-baru ini, saya melakukan penapisan, mengambil sampel rawak masing-masing 1,000, dan kemudian mengira berapa banyak dalam setiap kumpulan yang mempunyai sekurang-kurangnya lima suka, sekurang-kurangnya lima retweet, memasukkan URL, dan menyertakan media seperti foto atau video.

Anda boleh membuat semula set data dengan blok kod di bawah. Atau anda boleh menggunakan set data yang masuk akal sebagai carta bar yang dikelompokkan dan mengubah kod grafik saya yang seterusnya.

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, stringAsFactors = SALAH)

The graph_databingkai data adalah dalam "panjang" format: satu lajur untuk hashtag (#rstats atau #python), satu untuk kategori yang saya mengukur, dan satu lajur bagi 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

Itu biasanya struktur yang anda mahukan untuk kebanyakan grafik ggplot. 

Seterusnya saya akan membuat carta palang berkumpulan dan menyimpannya ke pemboleh ubah my_chart.

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

geom_col (kedudukan = "mengelak", alpha = 0.9) +

tema_minimal () +

xlab ("") +

ylab ("") +

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

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

Yang alpha = 0.9pada baris dua hanya membuat bar telus sedikit ( alpha = 1.0adalah legap sepenuhnya). Beberapa baris terakhir menyesuaikan rupa grafik: menggunakan tema minimum, menyingkirkan label paksi x dan y, membuang garis grid lalai, dan menetapkan warna untuk bar. Grafik akan kelihatan seperti ini jika anda menjalankan kod dan kemudian memaparkan my_chart:

Sharon Machlis,

Seterusnya saya akan menambah tajuk dengan kod ini:

carta_ku +

makmal (tajuk = "#python dan #rstats: Membandingkan 1,000 tweet rawak")

Sharon Machlis,

Ia kelihatan . . . OKEY. Tetapi pada sesi Persidangan RStudio yang berasingan, The Glamour of Graphics, Will Chase memberitahu kami bahawa legenda kurang ideal (walaupun dia menyatakan hal itu dalam bahasa yang sedikit lebih berwarna) Dia menunjukkan bahawa menambahkan warna tepat pada tajuk grafik dapat meningkatkan grafik anda. Kita boleh melakukannya dengan mudah dengan pakej ggtext.

Mengetahui sedikit gaya HTML dengan CSS sebaris pasti akan membantu anda menyesuaikan teks anda. Dalam kod di bawah, saya menggunakan span tag untuk memotong bahagian teks yang ingin saya kesan - #python dan #rstats. Dalam setiap set span tag saya menetapkan gaya - khususnya warna teks dengan color:dan kemudian nilai hex warna yang saya mahukan. Anda juga boleh menggunakan nama warna yang tersedia sebagai tambahan kepada nilai hex .

carta_ku +

makmal (

tajuk = "#python dan

#rstats: Membandingkan 1,000 tweet rawak "

) +

tema (

plot.title = element_markdown ()

)

Perhatikan bahawa terdapat dua bahagian untuk menggayakan teks dengan ggtext. Selain menambahkan gaya saya ke tajuk utama atau teks lain, saya perlu menambah element_markdown()elemen plot apa pun yang mempunyai warna. Saya melakukannya dalam kod di atas dalam theme()fungsi dengan plot.title = element_markdown().

Sekiranya anda menjalankan semua kod sehingga sekarang, grafik akan kelihatan seperti ini:

Sharon Machlis,

Saya merasa agak sukar untuk melihat warna dalam teks tajuk utama ini. Mari tambah tag untuk menjadikan teks tebal, dan mari kita tambahkan juga legend.position = noneuntuk menghilangkan legenda 

carta_ku +

makmal (

tajuk = " #python dan

#rstats : Membandingkan 1,000 tweet rawak "

) +

tema (

plot.title = element_markdown (), legenda.posisi = "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.