改变分类刻度的标签,您可以使用
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)
![enter image description here](https://istack.dev59.com/OzJpX.webp)
如果你发现自己需要重复粘贴这样完全相同的函数,有两种解决方法:
重新标记数据本身 - 或者 -
使用 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
方法在每个层中传递额外的标签。
scale_colour_discrete
,而不是作为额外的美学元素?但是,一个可重现的例子会有所帮助 - 我们无法看到你正在做什么。 - Calum Youscale_*_discrete
可行! - Jellz