R语言table转data.frame绘制分色柱状图报错求助
问题原因分析
- 行数不匹配报错:
table()输出是输入向量的唯一值频数统计结果,你生成的10000个连续型正态随机数去重后仅存在574个唯一取值,因此as.data.frame(table())转换后仅574行,对应574个柱子的统计信息,和10000个颜色向量长度自然不匹配。 - barplot参数报错:
barplot()的height参数要求传入数值型向量/矩阵表示每个柱子的高度,你直接传入完整data.frame对象,未提取频数列向量,因此触发类型错误。
正确实现方案
方案1:绘制频数统计分色柱状图(原table逻辑的data.frame实现)
# 1. 生成模拟数据 set.seed(123) x <- rnorm(10000) # 2. 转换为频数统计data.frame freq_df <- as.data.frame(table(x), stringsAsFactors = FALSE) # 3. 生成匹配行数的颜色向量,可自定义规则 # 随机分色示例 col_vec <- sample(rainbow(nrow(freq_df)), nrow(freq_df)) # 按频数高低分色示例 # col_vec <- ifelse(freq_df$Freq > median(freq_df$Freq), "#e34a33", "#2b8cbe") # 4. 调用barplot绘图 barplot( height = freq_df$Freq, col = col_vec, xlab = "数值", ylab = "出现频数", main = "正态随机数频数分色柱状图", xaxt = "n" # 因唯一值过多,隐藏x轴标签避免拥挤,不需要可删除 )
方案2:绘制原始10000个数值的分色柱状图(不做频数统计)
如果不需要统计频数,直接展示10000个原始值的大小,直接用原始向量绘图即可:
# 生成10000个匹配长度的颜色 col_full <- sample(c("red", "blue", "green", "purple"), 10000, replace = TRUE) # 绘图 barplot( height = x, col = col_full, xlab = "样本序号", ylab = "数值大小", main = "原始随机数分色柱状图", xaxt = "n" )
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

