我想将字符串设置N=xxx为我的图的标题,其中xxx是我作为data参数传递的数据框中的观察数ggplot().在我当前的代码中,我第二次显式传递该数据帧作为sprintf()我在其中使用的参数labs():
ggplot(mtcars, aes(mpg, hp)) +
labs(title=sprintf("N=%i", nrow(mtcars))) +
geom_point()
Run Code Online (Sandbox Code Playgroud)
这确实产生了所需的标题,但它不适用于更复杂的任务:我使用dplyr管道来构建正在绘制的数据框,因为这是一个耗时的过程,我不想重复管道第二次获取行数,如示例中所示.
那么,如何ggplot()从用于修改绘图的函数的参数规范中访问作为参数传递的数据框?
我想知道是否可以通过某种方式访问ggplot2标题图中提供的数据的列。所以像这样:
ggplot(mpg %>% filter(manufacturer == 'audi'),
aes(x = hwy, y = displ, label = model)) +
geom_point() +
geom_text(data = . %>% filter(hwy > 28)) +
ggtitle(unique(.$manufacurer))
Run Code Online (Sandbox Code Playgroud)
我经常像上面的示例中那样创建图以仅绘制子集,并且希望为该子集自动标注。目前,.不会在内识别出,ggtitle而是在geom_text其中起作用。
编辑:
由于我得到了一个很好的注释,并从@Brian标记为重复项,是否有解决方案可以{}在dplyr::group_by函数中使用此技巧?这不起作用。我很乐意为每个组创建单独的图,但是不知何故,只有完整的数据框可以ggplot调用。
mpg %>%
group_by(manufacturer) %>% {
ggplot(., aes(cyl, displ, color=manufacturer)) +
geom_point() +
ggtitle(unique(.$manufacturer))
}
Run Code Online (Sandbox Code Playgroud)
它说奥迪,但在单个图中打印所有制造商。