R ggplot2 在同一类别标签中使用斜体和非斜体
R ggplot2 using italics and non-italics in the same category label
对于我的 ggplot 图,我想在条形图上标记类别,第一个单词是斜体,而后面的单词是非斜体。我希望类别标签如下所示:
葡萄球菌 (OTU 1)
链球菌 (OTU 300)
我找到了使用 expression()
的示例,其中我可以将一些类别标签设为斜体,但我希望能够对许多不同的类别执行此操作。
绘制图表的代码如下(但我的数据有更多条形图需要绘制)。
library(ggplot2)
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$name <- paste0(
data$bactname, " (", data$OTUname, ")"
)
data$name <- factor(
data$name,
levels = data$name[order(data$value)], ordered = TRUE
)
ggplot(data, aes(name, value)) +
geom_col() + coord_flip()
由 reprex package (v0.3.0)
于 2020 年 1 月 28 日创建
您可以制作一个 expression
的矢量,并将其应用于 scale_x_discrete
中的 labels
参数:
labs <- sapply(
strsplit(as.character(data$name), " "),
function(x) parse(text = paste0("italic('", x[1], "')~", x[2]))
)
ggplot(data, aes(name, value)) +
geom_col() + coord_flip() +
scale_x_discrete(labels = labs)
如果您的标签中有 space,例如OTU 100
,您可能想用波浪号代替 space,例如OTU~100
.
我会使用 glue 和 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 创建
对于我的 ggplot 图,我想在条形图上标记类别,第一个单词是斜体,而后面的单词是非斜体。我希望类别标签如下所示:
葡萄球菌 (OTU 1)
链球菌 (OTU 300)
我找到了使用 expression()
的示例,其中我可以将一些类别标签设为斜体,但我希望能够对许多不同的类别执行此操作。
绘制图表的代码如下(但我的数据有更多条形图需要绘制)。
library(ggplot2)
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$name <- paste0(
data$bactname, " (", data$OTUname, ")"
)
data$name <- factor(
data$name,
levels = data$name[order(data$value)], ordered = TRUE
)
ggplot(data, aes(name, value)) +
geom_col() + coord_flip()
由 reprex package (v0.3.0)
于 2020 年 1 月 28 日创建您可以制作一个 expression
的矢量,并将其应用于 scale_x_discrete
中的 labels
参数:
labs <- sapply(
strsplit(as.character(data$name), " "),
function(x) parse(text = paste0("italic('", x[1], "')~", x[2]))
)
ggplot(data, aes(name, value)) +
geom_col() + coord_flip() +
scale_x_discrete(labels = labs)
如果您的标签中有 space,例如OTU 100
,您可能想用波浪号代替 space,例如OTU~100
.
我会使用 glue 和 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 创建