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

R语言定制条形图:显示0-50全分值的坐标轴设置

解决按组显示0-50全分值条形图的问题

原代码的问题在于table()只会统计数据中实际存在的分值,缺失的分值不会被纳入,导致x轴间隔不均。要显示0到50的所有分值,需要先强制包含所有可能的分值水平,再统计频次(包括0频次的情况)。

方法1:基础绘图包实现

核心思路是把pts转换为包含0-50所有水平的因子,这样table()会自动保留所有分值,哪怕没有对应数据:

team=c("m","w","m","w","w","m","m","w","m","w","m","w","m","m","m","m","m","w","w","m")
pts=c(12,27,6,26,29,16,23,30,20,17,41,14,8,9,5,7,28,42,6,27)
 
df <- data.frame(team,pts)

# 将pts转换为包含0-50所有水平的因子,强制保留全部分值
df$pts_full <- factor(df$pts, levels = 0:50)

# 统计每个组在所有分值上的频次(无数据的分值频次自动为0)
score_table <- table(df$team, df$pts_full)

# 绘制条形图
barplot(score_table, 
        las=1, 
        beside=TRUE,
        border="white",
        axis.lty = 1, 
        ylim= c(0,2),
        col=c("lightblue","pink"),
        xlab = "分值",
        ylab = "人数",
        main = "不同组别测试结果分布"
)

# 自定义x轴标签(因分组条形图每个分值对应2个条形,需调整刻度位置)
axis(1, at = seq(from = 1.5, to = 101.5, by = 2), labels = 0:50, cex.axis = 0.7)

关键细节说明

  • factor(df$pts, levels = 0:50):强制让pts包含0到50的所有可能值,缺失的分值会被标记为对应因子水平,统计时频次为0。
  • axis()参数调整:分组条形图(beside=TRUE)下,每个分值对应2个并排条形,因此x轴刻度的中心位置需要按seq(1.5, 101.5, by=2)计算,确保标签和对应分值的条形组对齐。
  • 标签优化:如果觉得x轴标签过密,可修改labels参数只显示间隔值,比如labels = ifelse(0:50 %% 5 ==0, 0:50, ""),只展示5的倍数的分值。

方法2:ggplot2实现(更简洁直观)

如果使用ggplot2,处理缺失分值的逻辑会更清晰:

library(ggplot2)
library(dplyr)

# 构建包含所有组别和分值的完整数据框架
full_data <- expand.grid(team = unique(df$team), pts = 0:50)
# 合并原数据的频次统计,缺失的频次补0
full_data <- full_data %>%
  left_join(count(df, team, pts), by = c("team", "pts")) %>%
  mutate(freq = replace_na(freq, 0))

ggplot(full_data, aes(x = pts, y = freq, fill = team)) +
  geom_bar(stat = "identity", position = "dodge", color = "white") +
  scale_x_continuous(breaks = 0:50) +
  scale_y_continuous(limits = c(0,2)) +
  scale_fill_manual(values = c("lightblue", "pink")) +
  labs(x = "分值", y = "人数", title = "不同组别测试结果分布") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1, size=7))

这里用expand.grid生成所有组和分值的组合,再通过left_join合并原数据的计数,缺失值补0后,ggplot会自动按连续均匀的x轴绘制条形图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:35:29