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

如何在ggplot2中筛选前10个起始站点绘制分组柱状图

解决方法:筛选前10站点并绘制会员类型占比柱状图

核心思路

要实现你的需求,得先筛选出总使用次数排名前10的起点站,再基于这些数据绘制按会员类型占比展示的堆叠柱状图,不能直接用全量数据绘图。

完整代码示例

先确保加载tidyverse包(包含数据处理工具dplyr和绘图工具ggplot2):

# 首次使用先安装包
install.packages("tidyverse")
library(tidyverse)

步骤1:筛选前10热门站点

# 统计各站点总次数,排序后取前10的站点名称
top10_stations <- all_trips_v2 %>%
  count(start_station_name, sort = TRUE) %>%
  slice(1:10) %>%
  pull(start_station_name)

# 过滤原数据集,只保留前10站点的记录,并指定站点排序(避免绘图时乱序)
top10_data <- all_trips_v2 %>%
  filter(start_station_name %in% top10_stations) %>%
  mutate(start_station_name = fct_relevel(start_station_name, top10_stations))

步骤2:绘制占比堆叠柱状图

ggplot(top10_data, aes(x = start_station_name, fill = member_casual)) +
  geom_bar(position = "fill") +  # 关键:将柱子高度归一为1,展示占比而非计数
  labs(
    title = "前10热门起点站会员类型占比",
    x = "起点站名称",
    y = "占比",
    fill = "会员类型"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转x轴标签,避免重叠

关键细节说明

  • count(start_station_name, sort=TRUE):快速统计各站点使用次数并降序排序,方便直接取前10。
  • fct_relevel:把站点名称转为因子并指定顺序,确保绘图时x轴按总次数从高到低排列,而非默认的字母顺序。
  • position="fill":这是实现占比展示的核心参数,替代默认的计数统计,让每个站点的柱子高度统一为1,不同会员类型的部分显示相对占比。

原代码问题分析

你之前的代码直接用全量数据集绘图,没有做站点筛选,所以会显示所有站点;同时默认的geom_bar()统计的是分组计数,而非占比,自然不符合预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:32