Base R绘图问题:逻辑斯蒂曲线图表中一条线段无法显示
问题解决方案
你的问题核心是剂量反应曲线默认使用对数x轴,而0在对数坐标系中无法被绘制,导致那条从(0, y_intersection)到(ec50, y_intersection)的水平线直接消失,只留下了垂直线。
修复方法
方案1:用实际数据中的最小浓度替换0
如果你的模型数据里包含浓度列(比如BPAPmodel$data$x),直接取其中的最小正值作为线段起点的x坐标:
y_intersection <- predict(BPAPmodel, data.frame(x=ec50)) # 提取数据中的最小浓度值(确保大于0) min_conc <- min(BPAPmodel$data$x) mult_seg <- data.frame(x0=c(min_conc, ec50), y0=c(y_intersection, y_intersection), x1=c(ec50, ec50), y1=c(y_intersection, 0)) plot(BPAPmodel, main="Dose Response - BPAP", xlab="Concentration (mg/kg)", ylab="Mortality", col="blue", pch=16) segments(x0=mult_seg$x0, y0=mult_seg$y0, x1=mult_seg$x1, y1=mult_seg$y1, col="red", lty=2)
方案2:手动设置极小正值替代0
如果没有现成的最小浓度数据,可以用一个接近0但大于0的数值(比如1e-6,可根据你的浓度单位调整):
y_intersection <- predict(BPAPmodel, data.frame(x=ec50)) mult_seg <- data.frame(x0=c(1e-6, ec50), y0=c(y_intersection, y_intersection), x1=c(ec50, ec50), y1=c(y_intersection, 0)) plot(BPAPmodel, main="Dose Response - BPAP", xlab="Concentration (mg/kg)", ylab="Mortality", col="blue", pch=16) segments(x0=mult_seg$x0, y0=mult_seg$y0, x1=mult_seg$x1, y1=mult_seg$y1, col="red", lty=2)
关键说明
对数坐标系中无法包含0值(因为log(0)无意义),所以只要把水平线的起点x坐标换成大于0的合法值,两条线段就能正常显示。
内容的提问来源于stack exchange,提问作者Georble02
相关产品推荐
相关产品推荐

