控制ggvis中r因子组的颜色

时间:2014-12-13 02:39:44

标签: r ggvis

我有一个关于在ggvis中控制数据点颜色的问题。

我有一个数据框,我正在以多种方式过滤(在一个闪亮的应用程序中,如果它很重要)。这导致通常不通过存在于得到的滤波数据帧中来观察组I着色数据点。这显然导致不同的颜色出现不同的颜色,这是令人困惑的。

这是一个非常接近的例子:

set.seed(101)
dfvis <- data.frame(x = runif(20), y = runif(20), mygroup = LETTERS[1:5])
dfvis


dfvis %>% 
  ggvis(x= ~x, y= ~y)  %>% 
  layer_points(fill = ~factor(mygroup))

enter image description here

让我们过滤一个小组 -

  dfvis <- dfvis %>% filter(mygroup!="A")

    dfvis %>% 
      ggvis(x= ~x, y= ~y)  %>% 
      layer_points(fill = ~factor(mygroup))

enter image description here

此处,“B”现在为蓝色,所有其他组在颜色顺序方面向上移动一个。

当在同一个df上执行多个过滤器时,是否有办法始终确保每个因子/组级别的颜色相同?

之前在ggplot中工作的一个技巧是在每个因子级别的数据帧末尾添加一个NA观测值。乍一看,这可以正常工作,因为颜色按照正确的顺序返回,但请注意左上角的流氓数据点!

dfvis1 <- rbind(dfvis, data.frame(x=NA, y=NA, mygroup="A"))

dfvis1 %>% 
  ggvis(x= ~x, y= ~y)  %>% 
  layer_points(fill = ~factor(mygroup))

enter image description here

所有人都很感激。

1 个答案:

答案 0 :(得分:10)

解决方案1 ​​

似乎我忽略了一个非常简单的解决方案:

只需重新定义因子的级别,然后从fill=

中删除因子

我会把它留下来,因为它可能会帮助别人。

dfvis$mygroup<-factor(dfvis$mygroup, levels=c("A", "B", "C", "D", "E"))

dfvis %>% 
  ggvis(x= ~x, y= ~y)  %>% 
  layer_points(fill = ~mygroup)

解决方案2

这可能实际上对ggvis用户更具普遍性。我们可以利用::=的优势。为每个组创建一个新的颜色变量

dfvis$color <- c("blue","orange","green","red","purple")

然后我们可以在ggvis函数中使用带有fill:=的未缩放原始颜色值...

#:= denotes unscaled raw value
dfvis %>% 
  ggvis(x= ~x, y= ~y, fill:= ~color)  %>% 
  layer_points()

即使在过滤掉其他组后,这也将确保颜色一致性。