图中的堆积条形图:如何控制每个堆栈中的条形顺序

时间:2016-06-15 02:08:54

标签: r plotly

我试图在图中订购堆积条形图,但它不符合我在数据框中传递它的顺序。

最好使用一些模拟数据显示:

library(dplyr)
library(plotly)
cars <- sapply(strsplit(rownames(mtcars), split = " "), "[", i = 1)
dat <- mtcars
dat <- cbind(dat, cars, stringsAsFactors = FALSE)
dat <- dat %>% 
         mutate(carb = factor(carb)) %>%
         distinct(cars, carb) %>% 
         select(cars, carb, mpg) %>% 
         arrange(carb, desc(mpg))
plot_ly(dat) %>% 
  add_trace(data = dat, type = "bar", x = carb, y = mpg, color = cars) %>%  
  layout(barmode = "stack") 

结果图不符合排序,我希望每个气缸组底部堆放最大mpg的车。有什么想法吗?

enter image description here

2 个答案:

答案 0 :(得分:3)

正如已经指出here,问题是由用于颜色分组的列中的重复值引起的(在此示例中为cars)。如前所述,可以通过按一列唯一名称对颜色进行分组来纠正条形的顺序。但是,这样做会产生一些不良的副作用:

  1. 来自同一制造商的不同型号汽车将以不同颜色显示(不是您所追求的 - 您想要由制造商着色)
  2. 图例中的条目将超出您的要求,即每个型号的汽车而不是每个制造商一个。
  3. 我们可以通过以下方式解决这个问题:a)从永远不会显示的虚拟轨迹创建图例(下面的代码中为add_trace(type = "bar", x = 0, y = 0...),以及b)使用{{}手动设置每个类别的颜色1}}参数。我用下面的彩虹托盘来说明原理。您可能希望自己选择更有吸引力的颜色。

    colors=

    enter image description here

答案 1 :(得分:2)

解决这个问题的一种方法是为所有汽车模型提供唯一的名称,并在labs(x = "x axis" (Å^2)", y = "y axis") 中使用它,但它会使图例变得更加混乱并影响颜色映射。以下是一些选项:

plotly

明天我会看更多,看看我是否可以改进图例和颜色映射。