เพิ่มสีสันให้กับข้อความ ggplot2 ของคุณใน R

แพ็คเกจ ggplot2 นั้นทรงพลังและสามารถปรับแต่งได้เกือบจะไม่มีที่สิ้นสุด แต่บางครั้งการปรับแต่งเล็กน้อยก็อาจเป็นเรื่องท้าทาย แพ็คเกจ ggtext มีจุดมุ่งหมายเพื่อลดความซับซ้อนของข้อความสไตล์ในการแสดงภาพของคุณ ในบทช่วยสอนนี้ฉันจะพูดถึงงานการจัดรูปแบบข้อความหนึ่งรายการที่ฉันเห็นการสาธิตที่ RStudio Conference เมื่อเดือนที่แล้ว: การเพิ่มสี

หากคุณต้องการทำตามฉันขอแนะนำให้ติดตั้ง ggplot2 เวอร์ชันพัฒนาจาก GitHub โดยทั่วไปบางสิ่งที่แสดงในการประชุมยังไม่ได้อยู่ใน CRAN และ ggtext ใช้ไม่ได้กับ ggplot เวอร์ชันเก่าบางรุ่น

คุณต้องติดตั้ง ggtext จาก GitHub เนื่องจากในขณะที่ฉันเขียนสิ่งนี้แพคเกจยังไม่ได้อยู่ใน CRAN ฉันใช้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) หลังจากดาวน์โหลดทวีตล่าสุดฉันได้ทำการกรองสุ่มตัวอย่างแบบสุ่ม 1,000 รายการจากนั้นคำนวณจำนวนไลค์ในแต่ละกลุ่มอย่างน้อยห้าครั้งมีการรีทวีตอย่างน้อยห้าครั้งรวม URL และรวมสื่อเช่นภาพถ่ายหรือ วิดีโอ

คุณสามารถสร้างชุดข้อมูลใหม่ได้โดยใช้บล็อกโค้ดด้านล่าง หรือคุณสามารถใช้ชุดข้อมูลใดก็ได้ที่เหมาะสมกับแผนภูมิแท่งที่จัดกลุ่มและแก้ไขโค้ดกราฟที่ตามมา

แฮชแท็ก <- c ("# python", "#python", "#python", "#python", "#rstats", "#rstats", "#rstats", "#rstats")

หมวดหมู่ <- c ("FiveLikes", "FiveRTs", "HasURL", "HasMedia", "FiveLikes", "FiveRTs", "HasURL", "HasMedia")

จำนวนทวีต <- c (179, 74, 604, 288, 428, 173, 592, 293)

graph_data <- data.frame (Hashtag, Category, 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, เติม = Hashtag)) +

geom_col (ตำแหน่ง = "หลบ", อัลฟา = 0.9) +

theme_minimal () +

xlab ("") +

ylab ("") +

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

scale_fill_manual (ค่า = c ("# ff8c00", "# 346299"))

alpha = 0.9ในบรรทัดที่สองก็ทำให้บาร์เล็ก ๆ น้อย ๆ ที่โปร่งใส ( alpha = 1.0ขุ่นเต็มที่) สองสามบรรทัดสุดท้ายจะปรับแต่งรูปลักษณ์ของกราฟโดยใช้ธีมขั้นต่ำกำจัดป้ายชื่อแกน x และ y ลบเส้นกริดเริ่มต้นและกำหนดสีสำหรับแท่ง กราฟควรมีลักษณะเช่นนี้หากคุณเรียกใช้โค้ดแล้วแสดงmy_chart:

ชารอนมัคลิส

ต่อไปฉันจะเพิ่มชื่อด้วยรหัสนี้:

my_chart +

ห้องทดลอง (title = "#python และ #rstats: เปรียบเทียบทวีตแบบสุ่ม 1,000 รายการ")

ชารอนมัคลิส

มันดู . . ตกลง. แต่ในเซสชันการประชุม RStudio Conference ที่แยกต่างหาก The Glamour of Graphics วิลเชสบอกเราว่าตำนานน้อยกว่าอุดมคติ (แม้ว่าเขาจะพูดถึงจุดนั้นด้วยภาษาที่มีสีสันกว่าเล็กน้อยก็ตาม) เขาแสดงให้เห็นว่าการเพิ่มสีในบรรทัดแรกของกราฟสามารถปรับปรุงกราฟิกของคุณได้ เราสามารถทำได้ค่อนข้างง่ายด้วยแพ็คเกจ ggtext

การรู้สไตล์ HTML เพียงเล็กน้อยด้วย CSS ในบรรทัดจะช่วยให้คุณปรับแต่งข้อความได้อย่างแน่นอน ในโค้ดด้านล่างนี้ฉันใช้แท็กช่วงเพื่อแบ่งส่วนของข้อความที่ฉันต้องการให้มีผล - #python และ #rstats ภายในแต่ละชุดของแท็กสแปนฉันตั้งค่าสไตล์โดยเฉพาะสีข้อความด้วยcolor:แล้วตามด้วยค่าฐานสิบหกของสีที่ฉันต้องการ นอกจากนี้คุณยังสามารถใช้สีที่มีชื่อนอกเหนือไปจากค่าฐานสิบหก

my_chart +

ห้องปฏิบัติการ (

title = "#python และ

#rstats: เปรียบเทียบทวีตแบบสุ่ม 1,000 รายการ "

) +

ธีม (

plot.title = element_markdown ()

)

โปรดทราบว่าการจัดรูปแบบข้อความด้วย ggtext มีสองส่วน นอกเหนือจากการเพิ่มสไตล์ของฉันลงในบรรทัดแรกหรือข้อความอื่น ๆ แล้วฉันยังต้องเพิ่มelement_markdown()องค์ประกอบของพล็อตที่มีสี ฉันทำในโค้ดด้านบนภายในtheme()ฟังก์ชันด้วยplot.title = element_markdown().

หากคุณเรียกใช้โค้ดทั้งหมดจนถึงตอนนี้กราฟควรมีลักษณะดังนี้:

ชารอนมัคลิส

ฉันพบว่ามันยากเล็กน้อยที่จะเห็นสีในข้อความพาดหัวนี้ มาเพิ่มแท็กเพื่อให้ข้อความเป็นตัวหนาและเพิ่มlegend.position = noneเพื่อลบคำอธิบาย: 

my_chart +

ห้องปฏิบัติการ (

title = " #pythonและ

#rstats : เปรียบเทียบทวีตแบบสุ่ม 1,000 รายการ "

) +

ธีม (

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.