我正在尝试使用facet更改ggplot图形的标签,并使用数据框中没有刻面的变量。代码如下 -
iris %>%
group_by(Species) %>%
summarise(lbl = mean(Petal.Length)) %>%
select(lbl) %>%
unlist() -> lbls
lbls <- map2(unique(iris$Species), lbls, paste, sep = "\n")
iris %>%
ggplot(aes(x = Sepal.Length, y = Sepal.Width, group = 1)) +
geom_point() +
facet_wrap(~ Species, labeller = lbls)
但是,这给了我以下错误 -
Error in cbind(labels = list(), list(`{`, if (!is.null(.rows) ||
!is.null(.cols)) { :
number of rows of matrices must match (see arg 2)
我查看了贴标机功能和不同的选项,但大多数似乎是针对包含在facet中的变量。有没有办法可以做到这一点?任何领导都表示赞赏,谢谢!
答案 0 :(得分:1)
从?labeller
上的文档中,labeller
也可以是命名字符向量。请注意,我们需要将字符向量包装在labeller
函数中。另外,通过查看帮助文件中的示例,我们需要将facetting变量Species
作为参数传递给labeller
。因此,调用应该类似于:
labeller = labeller(Species = setNames(unlist(lbls), unique(iris$Species)))
代码应为:
iris %>%
ggplot(aes(x = Sepal.Length, y = Sepal.Width, group = 1)) +
geom_point() +
facet_wrap(~ Species, labeller = labeller(Species = setNames(unlist(lbls), unique(iris$Species))))
此外,创建标签的更简洁方法是没有map2
:
lbls <- setNames(paste(unique(iris$Species), lbls, sep = "\n"), unique(iris$Species))
答案 1 :(得分:1)