r - 图 : how to control the order of bars in each stack 中的堆积条形图

标签 r plotly

我试图在 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

最佳答案

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

  • 来自同一制造商的不同模型汽车将显示不同的颜色(不是您想要的 - 您想按制造商着色)
  • 图例中的条目比您想要的要多,即每个型号的汽车一个,而不是每个制造商一个。

  • 我们可以通过以下方式解决这个问题:a) 从永远不会显示的虚拟轨迹创建图例(下面代码中的 add_trace(type = "bar", x = 0, y = 0...),以及 b) 使用 colors= 手动设置每个类别的颜色争论。我用下面的彩虹调色板来展示原理。您可能想自己选择一些更有吸引力的颜色。
    dat$unique.car <- make.unique(as.character(dat$cars))
    dat2 <- data.frame(cars=levels(as.factor(dat$cars)),color=rainbow(nlevels(as.factor(dat$cars))))
    dat2[] <- lapply(dat2, as.character)
    dat$color <- dat2$color[match(dat$cars,dat2$cars)]
    
    plot_ly() %>% 
      add_trace(data=dat2, type = "bar", x = 0, y = 0, color = cars, colors=color, showlegend=T) %>%  
      add_trace(data=dat, type = "bar", x = carb, y = mpg, color = unique.car, colors=color, showlegend=F, marker=list(line=list(color="black", width=1))) %>%  
      layout(barmode = "stack", xaxis = list(range=c(0.4,8.5))) 
    

    enter image description here

    关于r - 图 : how to control the order of bars in each stack 中的堆积条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824958/

    相关文章:

    r - 如何绘制彼此相邻的绘图仪表图?

    python - 绘制两个重叠的漏斗 : the code isn't working

    R 工作流 : How to handle hand-cleaning data

    r - 如何在ggplot2中绘制png图像?

    r - 对路径列表中的栅格进行分组/堆叠,并提取每组的最小值

    r - 在 plotly 中,如何保留有关套索选择和单击点的信息?

    r - 显示模态 onclick 条形图

    r - 仅在单击 Shiny 中的操作按钮后才更新服务器上的内容

    python - 我在 Python 中实现 R 的 Transfer Entropy 包时遇到问题

    r - 尝试写入或绘制光栅时 .local(object, ...) 出错