2016-09-07 59 views
0

我想绘制水平条并通过正值/负值对它们进行着色。问题是,即使我使用了categoryarray = cat,酒吧的顺序也发生了变化。如果我删除color = sign部分,订单是好的。这是我到目前为止的代码:分类在垂直条形图中的顺序(在Plotly中)

library(plotly) 
library(data.table) 

dt <- data.table(cat = c("A", "B", "C", "D"), 
        val = c(12, -3, -9, 2)) 
dt[, sign := "p"] 
dt[val < 0 , sign := "n"] 
setorder(dt, -cat) 

p <- plot_ly(data = dt, y = cat, x = val, type = "bar", orientation = "h", color = sign) %>% 
    layout(title = "Some title", 
     xaxis = list(categoryarray = cat, categoryorder = "array"), 
     showlegend = FALSE) 
p 

和输出: enter image description here

回答

1

由于您使用的是水平方向,y轴进行分类。所以,你需要做的是编辑layout函数,而不是内部的Y轴:

library(plotly) 
library(data.table) 

dt <- data.table(cat = c("A", "B", "C", "D"), 
        val = c(12, -3, -9, 2)) 
dt[, sign := "p"] 
dt[val < 0 , sign := "n"] 
setorder(dt, -cat) 

p <- plot_ly(data = dt, y = cat, x = val, type = "bar", orientation = "h", color = sign) %>% 
    layout(title = "Some title", 
     yaxis = list(categoryarray = cat, categoryorder = "array"), 
     showlegend = FALSE) 
p 

enter image description here