R语言ggplot2调用geom_point绘制双Y轴分类变量散点图问题求助
问题原因及修复方案
核心问题
- 重复映射Y轴:你在ggplot全局参数中设置了
y=Implementation,又在第一个geom_point里把y轴覆盖为Method_reliability,相当于把两个完全独立的分类变量硬塞到同一个y轴坐标体系里。ggplot会默认把分类变量转为1、2的整数坐标,Method_reliability的High/Low仅对应1、2两个数值,自然会显示在y轴底部,就是你看到的数值异常偏低的问题。 - 数据格式不匹配:要实现Y轴同时展示两组分类的效果,需要先把宽格式数据转为长格式,你当前的宽格式数据无法直接实现该排布。
- 存在冗余代码:你重复调用了两次
geom_point,还在labs里设置了没有用到的color映射,属于无效代码。
修复代码
首先加载依赖包、转换数据格式:
library(ggplot2) library(dplyr) library(tidyr) # 把宽格式数据转为长格式,合并两个Y轴分类变量 expanded_long <- expanded %>% pivot_longer(cols = c(Implementation, Method_reliability), names_to = "major_category", values_to = "minor_level") # 手动调整Y轴顺序,确保Implementation的类别在上、Method_reliability的类别在下 expanded_long$minor_level <- factor(expanded_long$minor_level, levels = c("Potential", "Observed", "High", "Low"))
绘图代码:
p1 <- ggplot(expanded_long, aes(x = Class, y = minor_level)) + geom_point(aes(size = cost_bil)) + # 旋转X轴刻度,无需加载额外包,兼容性更好 theme(axis.text.x = element_text(angle = 45, hjust = 1)) + xlab("Taxonomic Class") + ylab("Method reliability Implementation") + scale_size_continuous(range = c(1, 20)) + labs(size = "US$ billions")
内容的提问来源于stack exchange,提问作者Isma Soto Almena
相关产品推荐
相关产品推荐

