R语言直方图分箱着色:按其他列值总和绘制柱状图
我来帮你完成这个按分箱数值总和着色的柱状图需求~先把你的代码补全并优化,保证可复现且达到预期效果:
完整可复现代码
首先我们完善数据处理和绘图逻辑,核心是计算每个分箱+分组的数值总和,再把这个总和映射到柱子的颜色上:
# 加载必需的包 library(reshape) library(ggplot2) library(dplyr) # 设置随机种子,确保结果可复现 set.seed(123) # 生成原始数据 values = replicate(4, diff(c(0, sort(runif(92)), 1))) colnames(values) = c("A","B","C","D") counts = sample(10:100, 93, replace=T) df = data.frame(cbind(values,"count"=counts)) # 转换为长格式、分箱,并计算每个分箱+分组的数值总和 mdf = melt(df, id="count") mdf = mdf %>% mutate(binCounts = cut(count, breaks = seq(0, 100, by = 5))) %>% group_by(binCounts, variable) %>% summarise(total_value = sum(value), .groups = "drop") # 绘制最终柱状图 ggplot(mdf, aes(x = binCounts, y = total_value, fill = total_value)) + geom_col(position = "dodge") + # 分组柱子并排显示,若要堆叠可改为position = "stack" scale_fill_viridis_c(option = "plasma", name = "Total Value") + # 色盲友好的渐变色标 labs( x = "Count Bins", y = "Total Value per Bin & Group", title = "Bar Chart Colored by Total Value in Each Count Bin" ) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
关键逻辑说明
- 数据处理部分:通过
group_by+summarise计算每个分箱(binCounts)和每个类别(A/B/C/D)的value总和,这个总和就是我们用来着色的核心依据。 - 绘图部分:
fill = total_value把总和映射到柱子填充色,用连续色标直观展示数值大小;position = "dodge"让同一分箱下的不同类别柱子并排,方便横向对比;- 最后调整x轴标签角度,解决分箱过多导致的标签重叠问题。
内容的提问来源于stack exchange,提问作者user3978632
相关产品推荐
相关产品推荐

