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

如何调整ggplot柱状图中数值的显示样式?

R ggplot柱状图数值显示异常问题解决

问题详情

休闲用户(casual)周六的骑行次数应为437094,但运行以下R代码生成的图表中数值显示异常:

mutate(weekday = wday(started_at, label = TRUE)) %>% 
  group_by(member_casual, weekday) %>% 
  summarise(number_of_rides = n(),average_duration = mean(ride_length)) %>% 
  arrange(member_casual, weekday) %>%
  ggplot(aes(x = weekday, y = number_of_rides, fill = member_casual)) + 
  geom_col(position = "dodge")

数值显示异常

解决步骤

1. 先确认统计数据是否正确

在绘图前先输出统计后的数据集,验证number_of_rides的数值:

# 先将统计结果存为变量并打印
ride_stats <- mutate(weekday = wday(started_at, label = TRUE)) %>% 
  group_by(member_casual, weekday) %>% 
  summarise(number_of_rides = n(), average_duration = mean(ride_length)) %>% 
  arrange(member_casual, weekday)

print(ride_stats)
  • 如果打印结果里休闲用户周六的number_of_rides不是437094,说明数据处理环节有问题:检查started_at的日期格式是否正确,wday函数是否正确识别周六(默认周日为1、周六为7,确认是否和你的数据逻辑匹配)。
  • 如果数值正确,问题出在图表渲染。

2. 调整图表渲染参数

手动设置y轴范围

如果y轴被自动压缩导致数值显示异常,手动设置y轴的范围和刻度:

ggplot(ride_stats, aes(x = weekday, y = number_of_rides, fill = member_casual)) + 
  geom_col(position = "dodge") +
  scale_y_continuous(limits = c(0, 450000),  # 上限设为略高于437094
                     breaks = seq(0, 450000, 50000))  # 按50000间隔显示刻度

调整柱子宽度避免挤压

position="dodge"可能导致柱子重叠,调整宽度参数:

ggplot(ride_stats, aes(x = weekday, y = number_of_rides, fill = member_casual)) + 
  geom_col(position = position_dodge(width = 0.8),  # 调整柱子间距
           width = 0.7) +  # 调整柱子本身宽度
  scale_y_continuous(limits = c(0, 450000), breaks = seq(0, 450000, 50000))

3. 检查数据类型

确认number_of_rides是数值型,避免字符型导致绘图异常:

# 检查数据类型
class(ride_stats$number_of_rides)
# 如果是字符型,转换为数值
ride_stats$number_of_rides <- as.numeric(ride_stats$number_of_rides)

内容的提问来源于stack exchange,提问作者MALCOLM MALINKE RUIZ HURTADO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:46:05