如何为ggplot2';编写函数;dplyr工作流中的s缩放?

如何为ggplot2';编写函数;dplyr工作流中的s缩放?,r,ggplot2,dplyr,R,Ggplot2,Dplyr,我想在一个管道工作流中动态设置ggplot2::scale\u x\u discrete()(或类似)中的标签,由于我失败了,似乎我对管道的工作方式有误解。我在下面的两个示例中说明了我的问题,示例1可以很好地工作,而示例2是我想要的编写代码的方法。我想一步操作一个变异变量的标签 library(dplyr) library(ggplot2) 有效的方法如下。如您所见,我可以通过引用中间data.framedf # Example 1 df <- mtcars %>% m

我想在一个管道工作流中动态设置
ggplot2::scale\u x\u discrete()
(或类似)中的标签,由于我失败了,似乎我对管道的工作方式有误解。我在下面的两个示例中说明了我的问题,示例1可以很好地工作,而示例2是我想要的编写代码的方法。我想一步操作一个变异变量的标签

library(dplyr)
library(ggplot2)
有效的方法如下。如您所见,我可以通过引用中间data.frame
df

# Example 1
df <- 
  mtcars %>% 
  mutate(disp = cut(disp, breaks = 5)) 

df %>%   
  ggplot(aes(disp, hp)) +
  geom_point() + 
  scale_x_discrete(labels = substring(levels(df$disp), 2, 4))

我需要写什么来代替
.data$disp

您可以使用大括号将整个ggplot生成一个表达式

mtcars %>% 
  mutate(disp = cut(disp, breaks = 5)) %>%
  {
    ggplot(data = ., aes(disp, hp)) +
    geom_point() + 
    scale_x_discrete(labels = substring(levels(.$disp), 2, 4))
  }

然后,您可以在整个过程中将数据引用为

您可以将函数传递给
标签
参数:

library(dplyr)
library(ggplot2)

mtcars %>% 
  mutate(disp = cut(disp, breaks = 5)) %>%
  ggplot() + aes(disp, hp) + 
  geom_point() + 
  scale_x_discrete(labels = function(x) substring(x, 2, 4))

library(dplyr)
library(ggplot2)

mtcars %>% 
  mutate(disp = cut(disp, breaks = 5)) %>%
  ggplot() + aes(disp, hp) + 
  geom_point() + 
  scale_x_discrete(labels = function(x) substring(x, 2, 4))