R语言plotrix绘制时间序列图时如何设置x轴不等间隔刻度
plotrix绘图实现x轴不等间隔(压缩1975-1989年区间间距)方案
核心逻辑:R基础绘图框架的坐标轴默认是坐标位置和数值线性绑定的,无法直接修改某一段的轴间距,最稳妥的实现方式是先对年份做自定义坐标映射,压缩目标区间的坐标单位长度,绘图完成后再把坐标轴标签替换为真实年份即可,不会出现折线和刻度错位的问题。
具体实现步骤
- 第一步:生成自定义映射的x轴坐标
按区间给每个年份分配对应的绘图坐标值,1975年之前、1989年之后的年份保持1年对应1个坐标单位的正常间隔,1975-1989年区间按你需要的比例压缩单位长度(示例里压缩为原间距的20%,可自行调整系数):# 读取数据 a <- read.csv("DataSt.csv") # 生成自定义x坐标 a$x_pos <- ifelse( a$Year < 1975, # 1975年之前:正常间隔 a$Year - min(a$Year), ifelse( a$Year >=1975 & a$Year <=1989, # 1975-1989年:按比例压缩,修改0.2即可调整压缩程度,值越小间距越窄 (1975 - min(a$Year)) + (a$Year - 1975)*0.2, # 1989年之后:恢复正常间隔 (1975 - min(a$Year)) + (1989-1975)*0.2 + (a$Year - 1989) ) ) - 第二步:用自定义坐标绘图
把原代码中传入clplot的x参数替换为生成的x_pos列,保持关闭默认坐标轴的设置:library(plotrix) my_colors1 <- c("red", "green","blue") y <- a$TP clplot(a$x_pos, y, main="", lwd=5, labels=y, levels=c(37,964,4377), col=my_colors1, showcuts=T, bty="n", xlab="Year", ylab = "numbers", axes=F) - 第三步:手动添加匹配的坐标轴
x轴的刻度位置传入自定义的x_pos值,标签对应真实年份,y轴保持原有设置即可:# 绘制不等间隔x轴 axis(1, at = a$x_pos, labels = a$Year, las=2) # 绘制y轴 axis(2, at = seq(0, 4400, by = 100), las=2)
注意事项
- 不要尝试仅修改
axis()函数的at参数实现间距调整,这种方式只会移动刻度标签的位置,不会改变折线本身的坐标映射,会导致折线和刻度完全错位。 - 如果需要添加辅助线、标注等元素,x轴位置要传入对应点的
x_pos值,才能和图上位置匹配。 - 1975-1989区间的压缩系数可按需调整,数值越小该段的轴间距越窄。
内容的提问来源于stack exchange,提问作者mohitji
相关产品推荐
相关产品推荐

