R ggplot2 Using Italics and Non-Italics in the Same Category Label

For my ggplot figure, I want to label categories on a barplot with the first word being italicized, while the following words are non-italicized. I want the category labels to look like follows:

Staphylococcacae (OTU 1)

Streptococcus (OTU 300)

I've found examples using expression() where I can italicize a few category labels, but I would like to be able to do this for many different categories. The code to make a plot is as follows (but my data has many more bars to plot).

tmp.data <- data.frame(bactnames=c("Staphylococcaceae","Moraxella","Streptococcus","Acinetobacter"),OTUname=c("OTU_1","OTU_2","OTU_3","OTU_4"),value=c(-0.5,0.5,2,3)) tmp.data$bactnames2 <- paste0(tmp.data$bactnames," (",tmp.data$OTUname,")") tmp.data$finalnames <- factor(tmp.data$bactnames2,levels=tmp.data$bactnames2[order(tmp.data$value)],ordered=TRUE) ggplot(tmp.data, aes(finalnames,value)) + geom_bar(stat="identity") + coord_flip()

Any thoughts would be appreciated, and let me know if I can clarify anything.


You can make a vector of expressions, and apply it to the labels argument in scale_x_discrete:

labs <- sapply(strsplit(as.character(tmp.data$finalnames), " "), function(x) { parse(text = paste0("italic('", x[1], "')~", x[2])) }) ggplot(tmp.data, aes(finalnames,value)) + geom_bar(stat="identity") + coord_flip() + scale_x_discrete(labels = labs)


<img src=https://www.e-learn.cn/content/wangluowenzhang/"https://i.stack.imgur.com/16HWw.png" alt="enter image description here">

If you have spaces in your labels e.g. OTU 100, you may want to substitute a tilde for the space, e.g. OTU~100.

人吐槽 人点赞



用户名: 密码:
验证码: 匿名发表


查看评论:R ggplot2 Using Italics and Non-Italics in the Same Category Label