在ggplot中无需转换,为两个独立变量绘制双坐标轴柱状图
在ggplot中无需数据转换绘制双y轴柱状图
直接给你可运行的代码方案,假设你的数据是宽格式(和你图片里的结构一致,包含类别列+两个独立变量列):
模拟数据(匹配你的数据结构)
df <- data.frame( category = c("组1", "组2", "组3", "组4"), var1 = c(120, 150, 90, 180), # 第一个变量 var2 = c(25, 32, 18, 38) # 第二个变量 )
绘图代码
library(ggplot2) # 计算转换系数,让第二个变量的范围适配主y轴 coef <- max(df$var1) / max(df$var2) ggplot(df, aes(x = category)) + # 第一个变量的柱状图 geom_col(aes(y = var1), fill = "#2E86AB", width = 0.4) + # 第二个变量的柱状图,偏移位置避免重叠,同时乘以系数适配主轴 geom_col(aes(y = var2 * coef), fill = "#F24C4E", width = 0.4, position = position_nudge(x = 0.4)) + # 设置双y轴 scale_y_continuous( name = "变量1", sec.axis = sec_axis(~ . / coef, name = "变量2") # 反向转换得到第二个变量的真实刻度 ) + labs(x = "类别", title = "双y轴柱状图") + theme_minimal()
关键说明
- 无需把数据转成长格式,直接用原宽格式的两列变量
- 转换系数
coef是自动计算的,不用手动凑数,确保第二个变量的柱子能正常显示 - 用
position_nudge偏移第二个柱子,避免和第一个重叠 - 注意:ggplot官方不推荐使用双y轴,因为容易造成数据误导,非必要尽量不用这种展示方式
内容的提问来源于stack exchange,提问作者synat
相关产品推荐
相关产品推荐

