修复ggpubr::ggline连续标度传入离散值报错问题
问题描述
使用ggpubr包的ggline()函数绘制分面折线图时,触发运行错误:
Error: Discrete value supplied to continuous scale
已提前确认x轴映射的RecThematicity、y轴映射的yhat变量均为数值类型,数据集中变量类型识别正常,复现代码如下:
# 读取数据集 pd_RecThematicity <- read.csv("Lower_CRF_PDP/pd_RecThematicity.csv") # 绘图 ptg_RecThematicity<- ggline(pd_RecThematicity, x="RecThematicity", y="yhat", facet.by="variant")+ scale_x_continuous(name = "Recipient Thematicity")+ scale_y_continuous(name = "Predicted odd of variants", labels = c("0","0.5", "1"), limits = c(0,1), breaks = c(0,0.5,1))+ geom_smooth() + theme_classic2(base_size=12, base_family="Arial") ggsave("pdp_RecThematicity.png",ptg_RecThematicity, width=6, height=4, units="in", dpi = 1000, type = "cairo")
报错原因
核心原因是ggline()函数的默认参数逻辑和后续手动添加的连续标度冲突:
ggline()默认设计用于绘制分类x轴的分组折线图,默认参数numeric.x.axis = FALSE,会自动将传入的x轴数值型变量转换为因子(离散类型),默认加载离散型x轴标度。- 后续代码手动添加
scale_x_continuous()要求x轴使用连续型标度,此时x轴映射的变量已经被转换为离散因子,就会触发“离散值提供给连续标度”的报错。
注:该问题和y轴变量、分面变量无关,即使x、y原始变量均为数值型,只要触发了上述默认转换逻辑就会报错。
解决方法
- 核心修复:调用
ggline()时显式添加参数numeric.x.axis = TRUE,告知函数x轴为连续数值型,不要自动做离散因子转换,从根源避免标度冲突。
修改后的核心绘图代码如下:ptg_RecThematicity<- ggline(pd_RecThematicity, x="RecThematicity", y="yhat", facet.by="variant", numeric.x.axis = TRUE # 新增该参数 )+ scale_x_continuous(name = "Recipient Thematicity")+ scale_y_continuous(name = "Predicted odd of variants", labels = c("0","0.5", "1"), limits = c(0,1), breaks = c(0,0.5,1))+ geom_smooth() + theme_classic2(base_size=12, base_family="Arial") - 可选优化:
ggline()本身会自带分组连线逻辑,若需要的是拟合平滑线,可以保留geom_smooth(),若需要原始值连线可删除冗余的平滑层,避免图形元素重叠。
内容的提问来源于stack exchange,提问作者nick.yili9393
相关产品推荐
相关产品推荐

