解决R中‘Error: Discrete value supplied to continuous scale’错误
问题分析与解决:ggplot2绘制置信区间丝带时的离散值错误
问题背景
运行模拟模型后得到数据框summary_1a,包含产量值(prod_1a)、平均利润(mean)以及99%(0.5%和99.5%分位数)、80%(10%和90%分位数)置信区间的上下限。尝试绘制带均值线和重叠置信区间丝带的折线图时,触发错误:
Error: Discrete value supplied to continuous scale
查看数据结构确认所有变量均为数值型,但问题仍存在。
错误原因
在geom_ribbon的aes()映射中,你将置信区间列名用字符串引号('0.5%')包裹,ggplot2会将其识别为离散型常量值,而非引用数据框中的数值型列。由于y轴是连续刻度,离散值无法匹配,导致报错。
修正方案
对包含特殊字符(如%)的列名,使用**反引号(`)**包裹,明确告诉ggplot2引用数据框中的对应列:
修正后的绘图代码
ggplot(summary_1a)+ geom_line(aes(x=prod_1a, y=mean))+ # 99%置信区间丝带 geom_ribbon(aes(x=prod_1a, ymin=`0.5%`, ymax=`99.5%`), alpha=.3)+ # 80%置信区间丝带 geom_ribbon(aes(x=prod_1a, ymin=`10%`, ymax=`90%`), alpha=.3)
另一种可选写法(使用.data pronoun)
如果偏好更清晰的语法,可以用.data pronoun明确指定数据来源:
ggplot(summary_1a)+ geom_line(aes(x=prod_1a, y=mean))+ geom_ribbon(aes(x=prod_1a, ymin=.data[['0.5%']], ymax=.data[['99.5%']]), alpha=.3)+ geom_ribbon(aes(x=prod_1a, ymin=.data[['10%']], ymax=.data[['90%']]), alpha=.3)
验证说明
修正后,ggplot2会正确读取summary_1a中对应列的数值型数据,匹配y轴的连续刻度,顺利绘制出均值折线与重叠的置信区间丝带。
内容的提问来源于stack exchange,提问作者ceniza
相关产品推荐
相关产品推荐

