You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让plot_ly绘制的分组柱状图按犯罪数量降序排列?

解决plot_ly分组柱状图排序无效的问题

核心原因

plot_ly绘制离散型x轴的柱状图时,默认会按照因子水平顺序或字母顺序排列类别,和你预先排序的数据框行顺序无关,所以直接排序数据不会生效。

两种有效解决方法

方法1:在layout中手动指定x轴类别顺序

  1. 先提取你需要的排序依据(比如按总逮捕数降序),生成排序后的类别向量:
# 假设你的数据框是df,包含category(分组类别)、arrest_count(逮捕数)、group(分组变量,如年份)
library(dplyr)

# 按每个category的总逮捕数降序,提取排序后的类别列表
sorted_categories <- df %>%
  group_by(category) %>%
  summarise(total_arrest = sum(arrest_count)) %>%
  arrange(desc(total_arrest)) %>%
  pull(category)
  1. 绘制柱状图时,在layout()的xaxis参数中指定排序规则:
library(plotly)

plot_ly(df, x = ~category, y = ~arrest_count, color = ~group, type = "bar") %>%
  layout(
    xaxis = list(
      categoryorder = "array",  # 告诉plot_ly用自定义数组排序
      categoryarray = sorted_categories  # 指定排序后的类别数组
    )
  )

方法2:修改类别变量的因子水平顺序

如果你的category是因子类型,可以直接修改其水平顺序,plot_ly会自动沿用这个顺序:

# 将category转换为因子,水平顺序设为sorted_categories
df$category <- factor(df$category, levels = sorted_categories)

# 直接绘制,无需额外设置layout
plot_ly(df, x = ~category, y = ~arrest_count, color = ~group, type = "bar")

注意事项

  • 如果你的排序依据不是总逮捕数,而是某一特定分组的逮捕数(比如2023年的逮捕数),只需要调整sorted_categories的生成逻辑即可,比如过滤对应分组再排序。
  • 确保sorted_categories包含所有x轴的类别,没有遗漏或多余值。

内容的提问来源于stack exchange,提问作者sikimimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:35:22