Plotly条形图,为着色,不透明度或边框颜色添加第二个因子

时间:2016-09-13 16:09:13

标签: r shiny bar-chart plotly

我想在闪亮的应用程序中渲染plotly条形图,添加两个因子。 一个因素是没有问题,第二个是麻烦。而且我不确定它是否可能。

这是一些数据。 C是分组或着色的分组因素。这相对容易和直接。

set.seed(123)
df <- data.frame(A=letters[1:5],B=runif(5),C=sample(1:3,5,replace = T))
df <- df[order(df$B, decreasing = T),]
df
  A         B C
5 e 0.9404673 2
4 d 0.8830174 2
2 b 0.7883051 2
3 c 0.4089769 3
1 a 0.2875775 1

library(plotly)
plot_ly(df, type = "bar", x = A, y = B,  group = C)

enter image description here

现在我正在尝试添加另一个变量来更改边框(例如,红色,但可能是这是不可能的)或不透明度。重要的是,我不想更改图例或整体分组。只添加红线或为某些条添加不透明度。

所以,我添加了一些数据:

df$D <- c(0.2, 1, 0.2, 1, 0.2)

但是我试过的一切都没有用。

plot_ly(df, type = "bar", x = A, y = B,  color = as.factor(C)) # similar, but different order
plot_ly(df, type = "bar", x = A, y = B,  group = as.factor(C)) # same order, other colors
plot_ly(df, type = "bar", x = A, y = B,  group = C, color = as.factor(C)) #adds a second group
plot_ly(df, type = "bar", x = A, y = B,  group = C, opacity = as.factor(D)) # no idea whats happening
plot_ly(df, type = "bar", x = A, y = B,  color = as.factor(C), opacity = as.factor(D)) # the opacity of e is wrong

您是否有想法使用interaction()plotly::add_trace()或其他内容来解决问题?

我的预期输出,带有D==0.2的条形显示更粗的边框: enter image description here

1 个答案:

答案 0 :(得分:3)

你可以尝试:

df %>% 
  plot_ly(x = A, y = B, type = "bar", group = C, 
          marker = list(line = list(width = ifelse(D == 0.2, 10, NA), 
                                    color = ifelse(D == 0.2, "red", NA))),
          showlegend = FALSE)

给出了:

enter image description here

<强>更新

如果你想控制不透明度,我猜你可以玩toRGB()

cols <- RColorBrewer::brewer.pal(length(unique(df$C)), name = "Set1")
df$color <- factor(df$C, labels = cols)

df %>% 
  plot_ly(x = A, y = B, type = "bar",
          marker = list(color = toRGB(color, alpha = D)))

enter image description here

尽管传说仍然是使用这种方法的问题。