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

如何按区域与响应量排序geom_bar频率柱状图

解决思路:按区域分组后排序郡的顺序

要实现先按区域(西海岸在前、东海岸在后),再在每个区域内按响应量降序排列的需求,核心是重新定义county的因子水平顺序——让西海岸的郡按响应数从多到少排,之后跟着东海岸的同规则排序郡。直接用fct_infreq只会全局按响应数排序,不会考虑区域分组,这也是你之前尝试没生效的原因。

具体实现步骤

1. 预处理数据,确定郡的排序规则

先用dplyr统计每个郡的响应数,同时关联所属区域,然后按区域优先级+响应数降序排序:

library(dplyr)
library(forcats)
library(ggplot2)

# 统计每个郡的响应数,绑定区域信息
county_order_df <- df %>%
  group_by(region, county) %>%
  summarise(response_count = n(), .groups = "drop") %>%
  # 先按区域排序(West Coast 优先),再按响应数降序
  arrange(desc(region == "West Coast"), desc(response_count))

2. 重新设置county的因子顺序

把原数据中的county转换成按上述顺序排列的因子:

df$county <- fct_relevel(df$county, county_order_df$county)

3. 绘制目标图表

现在直接用处理好的因子顺序绘图,就能得到你想要的效果:

ggplot(df, aes(x = county, y = stat(count), fill = region)) +
  geom_bar() +
  coord_flip() +
  scale_y_continuous() +
  ggtitle("Responses by County") +
  ylab("Number of Responses") +
  xlab("County") +
  labs(fill = "Region") +
  geom_text(stat='count', aes(label=..count..), vjust = .5, hjust = -1)

为什么之前的interaction参数没效果?

group = interaction(region, county)只是告诉ggplot如何分组计算统计量,但并没有改变x轴上county的显示顺序——你的核心需求是调整因子水平的顺序,而不是分组计算,所以这个参数不会带来视觉上的变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:57:40