如何在R语言中创建指定简单图表?data.frame配置遇问题
在R中创建简单图表并正确配置data.frame
一、先搞定正确的data.frame结构
新手最容易踩的坑是把类别变量存成列名(宽格式),而R绘图工具(尤其是ggplot2)更适配长格式数据——每一行对应一个观测,每一列对应一个变量。
- 正确长格式示例(以分组数值对比为例):
df <- data.frame( 类别 = c("A", "B", "C", "A", "B", "C"), 数值 = c(10, 15, 8, 12, 18, 9), 分组 = c("组1", "组1", "组1", "组2", "组2", "组2") ) - 如果你手头是宽格式数据(类别是列名),用
tidyr::pivot_longer()转换:# 宽格式示例(需要转换) wide_df <- data.frame( 组1 = c(10,15,8), 组2 = c(12,18,9), row.names = c("A","B","C") ) library(tidyr) df <- pivot_longer(wide_df, cols = everything(), names_to = "分组", values_to = "数值") df$类别 <- rownames(wide_df)
二、用ggplot2绘制常见简单图表
1. 单类别柱状图
library(ggplot2) ggplot(df, aes(x = 类别, y = 数值)) + geom_bar(stat = "identity", fill = "#2E86AB") + labs(title = "类别数值对比", x = "类别", y = "数值") + theme_minimal()
2. 分组柱状图
ggplot(df, aes(x = 类别, y = 数值, fill = 分组)) + geom_bar(stat = "identity", position = "dodge") + labs(title = "分组类别数值对比", x = "类别", y = "数值", fill = "分组") + theme_minimal()
3. 折线图(带数据点)
ggplot(df, aes(x = 类别, y = 数值, group = 分组, color = 分组)) + geom_line(size = 1.2) + geom_point(size = 3) + labs(title = "分组类别数值趋势", x = "类别", y = "数值", color = "分组") + theme_minimal()
三、常见问题排查
- 图表不显示变量?先检查这几点:
- 列名拼写是否一致(比如绘图时写
Category但实际列名是类别) - 变量类型是否正确:类别变量用字符/因子型,数值变量必须是数值型(用
class(df$数值)验证) - 用base R绘图(如
barplot())时,需传入向量或矩阵,宽格式可直接用:barplot(t(wide_df), beside = TRUE, col = c("#2E86AB", "#F24C4E"), legend.text = rownames(wide_df))
- 列名拼写是否一致(比如绘图时写
内容的提问来源于stack exchange,提问作者Alex M
相关产品推荐
相关产品推荐

