R 绘图 - 条形图:从基础到进阶实战 1. 引言条形图Bar Chart是数据可视化中最常用的图表类型之一用于展示分类变量的数值对比。在 R 语言中条形图的绘制方式非常灵活既可以使用基础绘图系统barplot()也可以使用ggplot2包实现更丰富的定制。本文将从基础语法出发逐步深入到分组条形图、堆叠条形图、水平条形图以及主题美化等实战技巧帮助读者快速掌握 R 条形图的绘制方法。2. 环境准备与数据构造在开始绘图之前先确认 R 环境已安装ggplot2包。若未安装可执行以下命令进行安装install.packages(ggplot2)本文示例将使用一个模拟的销售数据集包含不同产品类别的季度销售额数据library(ggplot2) 构造示例数据产品类别与销售额 sales_data - data.frame( category c(电子产品, 服装, 食品, 家居, 图书), sales c(320, 180, 260, 210, 150) ) 查看数据结构 print(sales_data)3. 基础条形图barplot() 函数R 基础绘图系统中的barplot()函数是最简单的条形图绘制方式适合快速查看数据分布。3.1 简单垂直条形图# 使用基础绘图系统绘制垂直条形图 barplot( height sales_data$sales, names.arg sales_data$category, main 各产品类别销售额, xlab 产品类别, ylab 销售额万元, col steelblue, border white )上述代码中height参数指定条形的高度即数值向量names.arg用于设置每个条形对应的类别标签col控制条形填充颜色。3.2 水平条形图# 设置 horiz TRUE 绘制水平条形图 barplot( height sales_data$sales, names.arg sales_data$category, main 各产品类别销售额水平, xlab 销售额万元, ylab 产品类别, col tomato, border white, horiz TRUE, las 1 )当类别名称较长时水平条形图往往比垂直条形图更易阅读。las 1用于确保坐标轴标签始终水平显示。4. ggplot2 条形图geom_bar() 与 geom_col()ggplot2提供了更强大的绘图语法。绘制条形图时geom_bar()默认对数据进行统计计数而geom_col()直接使用数据中的数值作为条形高度。4.1 使用 geom_col() 绘制数值条形图# 使用 geom_col() 直接映射数值列 p1 - ggplot(sales_data, aes(x category, y sales)) geom_col(fill #4E79A7, width 0.6) labs( title 各产品类别销售额, x 产品类别, y 销售额万元 ) theme_minimal() print(p1)4.2 使用 geom_bar() 绘制计数条形图# 构造包含重复记录的样本数据 set.seed(42) survey_data - data.frame( satisfaction sample(c(满意, 一般, 不满意), 100, replace TRUE) ) geom_bar() 默认统计每个类别的频数 p2 - ggplot(survey_data, aes(x satisfaction)) geom_bar(fill #F28E2B, width 0.5) labs( title 满意度调查频数分布, x 满意度, y 人数 ) theme_minimal() print(p2)5. 分组条形图与堆叠条形图当数据包含两个分类维度时可以使用分组条形图或堆叠条形图进行对比。5.1 构造多维度数据# 扩展数据增加季度维度 sales_quarter - data.frame( category rep(c(电子产品, 服装, 食品, 家居, 图书), each 4), quarter rep(c(Q1, Q2, Q3, Q4), times 5), sales c( 80, 95, 70, 75, 45, 50, 40, 45, 60, 65, 70, 65, 50, 55, 48, 57, 35, 40, 38, 37 ) ) head(sales_quarter)5.2 分组条形图# 使用 position dodge 实现分组条形图 p3 - ggplot(sales_quarter, aes(x category, y sales, fill quarter)) geom_col(position dodge, width 0.7) labs( title 各产品类别季度销售额对比, x 产品类别, y 销售额万元, fill 季度 ) theme_minimal() print(p3)5.3 堆叠条形图# 使用 position stack 实现堆叠条形图 p4 - ggplot(sales_quarter, aes(x category, y sales, fill quarter)) geom_col(position stack, width 0.7) labs( title 各产品类别季度销售额堆叠图, x 产品类别, y 销售额万元, fill 季度 ) theme_minimal() print(p4)6. 条形图美化与进阶技巧6.1 添加数据标签# 使用 geom_text() 在条形上方添加数值标签 p5 - ggplot(sales_data, aes(x category, y sales)) geom_col(fill #59A14F, width 0.6) geom_text(aes(label sales), vjust -0.5, size 4) labs( title 各产品类别销售额带标签, x 产品类别, y 销售额万元 ) ylim(0, 380) theme_minimal() print(p5)6.2 自定义颜色与主题# 使用 scale_fill_manual() 自定义颜色并调整主题 p6 - ggplot(sales_quarter, aes(x category, y sales, fill quarter)) geom_col(position dodge, width 0.7) scale_fill_manual(values c(#4E79A7, #F28E2B, #E15759, #76B7B2)) labs( title 各产品类别季度销售额对比, x 产品类别, y 销售额万元, fill 季度 ) theme_bw() theme( plot.title element_text(hjust 0.5, face bold, size 16), axis.text.x element_text(angle 45, hjust 1) ) print(p6)6.3 使用 coord_flip() 实现水平条形图# 通过 coord_flip() 将垂直条形图旋转为水平条形图 p7 - ggplot(sales_data, aes(x reorder(category, sales), y sales)) geom_col(fill #B07AA1, width 0.6) geom_text(aes(label sales), hjust -0.2, size 4) coord_flip() labs( title 各产品类别销售额水平排序, x 产品类别, y 销售额万元 ) xlim(0, 380) theme_minimal() print(p7)这里使用reorder()函数按销售额对类别进行排序使条形图呈现从高到低的排列更便于比较。7. 常见问题与注意事项数据格式geom_col()要求y映射为数值列若使用geom_bar()且未指定y则默认统计频数。坐标轴截断当数值差异较大时不建议直接截断坐标轴以免误导读者可通过coord_cartesian(ylim c(...))调整显示范围。中文显示若图中中文标签出现乱码需在 R 中设置中文字体例如使用windowsFonts()或showtext包。颜色选择建议使用色盲友好的配色方案如RColorBrewer包中的Set2或Paired调色板。8. 总结本文系统介绍了 R 语言中条形图的绘制方法涵盖基础绘图系统的barplot()函数和ggplot2包的geom_bar()/geom_col()两种主流方式并进一步讲解了分组条形图、堆叠条形图、水平条形图以及数据标签、颜色主题等美化技巧。掌握这些内容后读者可以根据实际业务场景灵活选择合适的条形图形式快速完成高质量的数据可视化输出。