对于我的ggplot图,我想在条形图上标记类别,第一个单词是斜体,而下面的单词是非斜体。我希望类别标签如下所示:
Staphylococcacae (OTU 1)
链球菌(OTU 300)
我找到了使用表达式()的示例,其中我可以将几个类别标签用于斜体,但我希望能够为许多不同的类别执行此操作。 制作情节的代码如下(但我的数据还有更多的条形图)。
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()
任何想法都会受到赞赏,如果我能澄清任何事情,请告诉我。
答案 0 :(得分:5)
我会使用胶和ggtext包。
library(tidyverse)
library(ggtext)
library(glue)
data <- data.frame(
bactname = c("Staphylococcaceae", "Moraxella", "Streptococcus", "Acinetobacter"),
OTUname = c("OTU_1", "OTU_2", "OTU_3", "OTU_4"),
value = c(-0.5, 0.5, 2, 3)
)
data %>% mutate(
name = glue("*{bactname}* ({OTUname})"),
name = fct_reorder(name, value)
) %>%
ggplot(aes(name, value)) +
geom_col() + coord_flip() +
theme(axis.text.y = element_markdown())
由reprex package(v0.3.0)于2020-01-29创建
答案 1 :(得分:2)
您可以制作expression
s的向量,并将其应用于labels
中的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)
输出:
如果您的标签中有空格,例如OTU 100
,您可能希望将波浪号替换为空格,例如OTU~100
。