在ggplot

时间:2017-05-16 13:57:02

标签: r ggplot2 dplyr

我有一个示例数据框

df <- data.frame(a = c(sample(LETTERS[1:5], 10, TRUE), "Z", "Z"), 
                 b = c(rnorm(10), NA, NA))

我正在尝试做一些简单的绘图并添加一些颜色。我可以很容易地知道在我绘制之前会有多少a个值:

library(randomcoloR)

df %>%
    filter(!is.na(b)) %>%
    ggplot() +
    geom_bar(aes(x = a, y = b),
             fill = randomColor(5),
             stat = "summary", 
             fun.y = "mean")

但是,如果我不知道会有多少a值呢?如何在a语句中获取内的唯一geom_xxx内联的数量?

使用n_distinct(a)不起作用并提供错误

df %>%
    filter(!is.na(b)) %>%
    ggplot() +
    geom_bar(aes(x = a, y = b),
             fill = randomColor(n_distinct(a)),
             stat = "summary", 
             fun.y = "mean")
  

n_distinct_multi(list(...),na.rm)中的错误:找不到对象'a'

使用uniqueN()中的data.table不起作用并提供错误:

library(data.table)

df %>%
    filter(!is.na(b)) %>%
    ggplot() +
    geom_bar(aes(x = a, y = b),
             fill = randomColor(uniqueN(a)),
             stat = "summary", 
             fun.y = "mean")
  

uniqueN(a)中的错误:找不到对象'a'

使用unique(a) %>% length()也不起作用,并在上面提供相同的错误。

我可以在a语句中找到内联的唯一geom_xxx值的内联数吗?我觉得我在这里错过了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

您可以将数据框传输到匿名函数中:

df %>%
  filter(!is.na(b)) %>%
  (function(df) ({
    ggplot(df) +
      geom_bar(aes(x = a, y = b),
               fill = randomColor(length(unique(df$a))),
               stat = "summary",
               fun.y = "mean")
    }))