要更改分类量表的标签,请使用scale_*_discrete(labels = ...)。在这里,您只需为color、shape 和linetype 执行此操作。
一般应避免使用lty =;允许该同义词与基本 R 兼容,但它并未在整个 ggplot2 中得到普遍支持。
我将您的标签更改为更接近我认为您的意思(第三个条目现在是“Aca+”而不是“Aca-”的重复)并让它们更好地左对齐(通过添加一个不可见的“+ " 到第一个以创建适当的间距)。
lab1 <- c(expression(Pol[(Art)*phantom("+")]),
expression(Pol['(Aca-)']),
expression(Pol['(Aca+)']))
library(ggplot2)
ggplot(mtcars,
aes(wt, mpg,
color = factor(cyl),
shape = factor(cyl),
linetype = factor(cyl))) +
geom_point() +
stat_smooth(se = F) +
scale_color_discrete(labels = lab1) +
scale_shape_discrete(labels = lab1) +
scale_linetype_discrete(labels = lab1)
如果您发现自己需要重复这样的函数的精确副本,有两种解决方法:
-
重新标记数据本身 - 或 -
-
使用purrr::invoke_map 迭代函数
library(purrr)
ggplot(mtcars,
aes(wt, mpg,
color = factor(cyl),
shape = factor(cyl),
linetype = factor(cyl))) +
geom_point() +
stat_smooth(se = F) +
invoke_map(list(scale_color_discrete,
scale_linetype_discrete,
scale_shape_discrete),
labels = lab1)
更新:
这种方法大部分都很好,但现在expression(...) 语法有一个更好的替代方案,基于markdown 的优秀{ggtext} 包:https://github.com/wilkelab/ggtext
要更改为此方法,请使用如下所示的(可选命名的)标签向量:
library(ggtext)
lab1 <- c(
`4` = "Pol<sub>(Art)</sub>",
`6` = "Pol<sub>(Aca-)</sub>",
`8` = "Pol<sub>(Aca+)</sub>"
)
然后将这一行添加到您的主题中:
... +
theme(
legend..text = element_markdown()
)
与其他方法相比的优势在于:
- markdown 语法更容易在线搜索帮助和
- 现在这些标签可以作为列存储在实际数据中,而不是将它们单独传递给每个 geom
您可以使用该新列作为您的美学映射 [ggplot(..., aes(color = my_new_column, linetype = my_new_column, ...)],而不必使用 purrr::invoke 方法在每一层中传递额外的标签。