R语言相同绘图逻辑处理小数值数据时Y轴刻度不显示问题求助
问题根源
R中:运算符的作用是生成整数步长的序列,若右侧数值小于1,0:数值的返回结果仅为0。
你第二个案例里g_range[2]的取值为0.01,因此0:g_range[2]仅得到0,乘以0.001后得到的刻度位置为0,而你设置的Y轴显示范围是0.006~0.01,0不在可视区域内,自然不会显示Y轴刻度。
补充说明:你第一个可运行的示例逻辑实际也存在问题,g_range[2]为31400时0:31400会生成三万多个数值,乘以6000后刻度会高度重叠,属于巧合能正常显示的情况。
可行解决方案
将生成刻度位置的逻辑替换为seq()函数自定义步长,或pretty()函数自动生成美观刻度即可,同时注意基础R绘图不要用+连接后续绘图语句(+是ggplot2的语法,基础绘图中属于冗余写法)。
方案1:固定0.001步长显示刻度
tub <- c(.01, .009, .007) g_range <- range(.006, tub) plot(tub, type="o", col="blue", ylim=g_range, axes=FALSE, ann=FALSE) axis(1, at=1:3, lab=c("Iso", "Hyper", "Hypo")) # seq按指定范围、步长生成刻度位置 axis(2, las=1, at = seq(from = g_range[1], to = g_range[2], by = 0.001)) box()
运行后Y轴会按0.001的间隔显示0.006、0.007、0.008、0.009、0.01的全部刻度。
方案2:自动生成适配刻度
如果不需要固定步长,可直接用pretty()函数让R自动生成符合阅读习惯的刻度:
tub <- c(.01, .009, .007) g_range <- range(.006, tub) plot(tub, type="o", col="blue", ylim=g_range, axes=FALSE, ann=FALSE) axis(1, at=1:3, lab=c("Iso", "Hyper", "Hypo")) axis(2, las=1, at = pretty(g_range)) box()
内容的提问来源于stack exchange,提问作者Nicki Nouri
相关产品推荐
相关产品推荐

