我有一个关于控制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))
Run Code Online (Sandbox Code Playgroud)
让我们过滤一组 -
dfvis <- dfvis %>% filter(mygroup!="A")
dfvis %>%
ggvis(x= ~x, y= ~y) %>%
layer_points(fill = ~factor(mygroup))
Run Code Online (Sandbox Code Playgroud)

这里,"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))
Run Code Online (Sandbox Code Playgroud)

所有帮助赞赏.
jal*_*pic 10
似乎我忽略了一个非常简单的解决方案:
只需重新定义因子的级别,并从中删除因子 fill=
我会把它留下来,因为它可能会帮助别人.
dfvis$mygroup<-factor(dfvis$mygroup, levels=c("A", "B", "C", "D", "E"))
dfvis %>%
ggvis(x= ~x, y= ~y) %>%
layer_points(fill = ~mygroup)
Run Code Online (Sandbox Code Playgroud)
这实际上可能对ggvis用户更具普遍性.我们可以利用:对比:=.为每个组创建一个新的颜色变量
dfvis$color <- c("blue","orange","green","red","purple")
Run Code Online (Sandbox Code Playgroud)
然后我们可以fill:=在ggvis函数中使用未缩放的原始颜色值...
#:= denotes unscaled raw value
dfvis %>%
ggvis(x= ~x, y= ~y, fill:= ~color) %>%
layer_points()
Run Code Online (Sandbox Code Playgroud)
即使在过滤掉其他组后,这也将确保颜色一致性.
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |