有没有一种方法可以在ggplot2内两次或更多次调用tidyverse创建的数据帧?

时间:2019-05-10 23:06:43

标签: r ggplot2

我正在尝试在ggplot2中绘制图形,并试图突出显示或区分另一个因素,下一个代码可以重现我正在尝试对Datsun 710汽车的红点进行的操作:< / p>

st1

但是我想这样做而不用在第八行 mtcars $ car 上再次调用df,而不要依赖ggplot第一个df参数之外的df。

有可能吗?

2 个答案:

答案 0 :(得分:2)

在括号中使用点:

library(dplyr)
library(forcats)
library(ggplot2)
library(tibble)

mtcars %>% 
  rownames_to_column("car") %>%
  { ggplot(., aes(x = fct_reorder(car, mpg), y = mpg, label = mpg)) +
    geom_point(color = if_else(.$car == "Datsun 710", "Red", "Black")) +
    geom_text(size = 3, hjust = -0.2) + 
    coord_flip()
  }

答案 1 :(得分:1)

您可以创建一个强制使用相同数据框的函数。

library(tibble)
library(ggplot2)
library(magrittr)
library(forcats)
library(dplyr)
mtcars2 <- mtcars %>% 
  rownames_to_column("car")

foo <- function(x){
  x %>% 
  ggplot(aes(x = fct_reorder(car, mpg), 
             y = mpg, 
             label = mpg)) +
  geom_point(color = if_else(x$car == "Datsun 710", "Red", "Black")) +
  geom_text(size = 3, hjust = -0.2) + 
  coord_flip()
}

foo(mtcars2)

但是请注意,如果是小标题,则$符号将不起作用,您需要使用pull()。

不过,我认为在此处进行管道输送没有太大好处。