R语言散点图坐标轴百分比设置及图例不显示问题求助
R语言散点图问题解决:百分比刻度+图例显示
一、设置坐标轴为百分比格式
不管是Y轴还是X轴,核心是自定义刻度标签,步骤如下:
- 绘图时先关闭默认坐标轴(
axes=FALSE),同时设置好轴的显示范围(xlim/ylim) - 用
axis()函数手动绘制坐标轴,通过labels参数把刻度文本改成带%的格式 - 按需用
mtext()添加坐标轴标题
比如你的数据里Y轴要显示20%、30%…60%,就把刻度位置设为20、30等数值,标签用paste0(seq(20,60,10), "%")生成;X轴设置逻辑完全一致。
二、修复图例不显示的问题
你的图例看不到是因为设置的位置(1,95)超出了当前Y轴的范围(Y轴最大值只有60),被画到了图外面。两种解决方法:
- 用位置关键词设置,比如
"topright"、"bottomleft",R会自动把图例放在对应角落,不会超出绘图区域 - 根据数据范围自定义坐标,比如
(50,55),这个位置在散点右上方,不会被截断
三、完整修正代码
dose <- c(20, 30, 40, 45, 60) drugA <- c(16, 20, 27, 40, 60) drugB <- c(15, 18, 25, 31, 40) # 关闭默认坐标轴,提前设置轴范围 plot(dose, drugA, col='blue', lty=1, axes=FALSE, xlim=c(20,60), ylim=c(15,60), xlab="剂量", ylab="效果") points(dose, drugB, col='red', lty=2) # 绘制带百分比的Y轴 axis(2, at=seq(20,60,10), labels=paste0(seq(20,60,10), "%")) # 绘制带百分比的X轴(不需要的话删掉此行) axis(1, at=seq(20,60,10), labels=paste0(seq(20,60,10), "%")) # 用关键词定位图例,避免超出范围 legend("topright", legend=c("Drug A", "Drug B"), col=c("blue", "red"), lty=1:2, cex=0.8) # 也可以用自定义坐标:legend(50,55, legend=c("Drug A", "Drug B"), col=c("blue", "red"), lty=1:2, cex=0.8) grid(lty=1)
代码说明
axes=FALSE:关闭默认坐标轴,方便我们完全自定义刻度axis(2,...):side=2代表左侧Y轴,at指定刻度在数值上的位置,labels设置显示的百分比文本- 如果不需要X轴的百分比格式,直接删掉
axis(1,...)这一行,改用axis(1)显示默认刻度即可
内容的提问来源于stack exchange,提问作者A lover of learning
相关产品推荐
相关产品推荐

