R ggplot2 Using Italics and Non-Italics in the Sam

2019-07-13 06:44发布

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.

1条回答
够拽才男人
2楼-- · 2019-07-13 07:23

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)

Output:

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.

查看更多
登录 后发表回答