R语言绘图:自定义X轴刻度标签序列,仅显示指定年份标签
解决X轴特定刻度显示标签的问题
我来帮你搞定这个X轴标签的需求!你想要保留所有刻度标记,但只显示2000、2005、2010、2015这几个年份的标签,其余留空。你的思路是对的,但可能两个小问题导致没生效,我给你两种可靠的解决方法:
问题分析
你之前的尝试里有两个潜在问题:
- 数据集里的年份列是
year,不是fecha,所以coefs_fechas_PA$fecha应该改为coefs_PA$year - 手动计算
rep()的次数容易出错,尤其是数据有变动时,不如用条件判断自动生成标签更可靠
方法一:条件判断自动生成标签(推荐)
这种方法不需要手动数位置,直接根据年份值来设置标签,灵活不易错:
# 生成X轴标签:指定年份显示字符串,其余为空 x_labels <- ifelse(coefs_PA$year %in% c(2000, 2005, 2010, 2015), as.character(coefs_PA$year), "") # 替换你原来的axis(1)代码 axis(1, at = coefs_PA$year, labels = x_labels)
方法二:手动构建标签向量(适合固定位置)
如果你坚持手动构建,要确保标签向量长度和年份数量一致(你的数据集有22个年份),同时修正列名错误:
# 手动构建标签向量,对应每个年份的位置 x_labels <- c(rep("", 2), "2000", rep("", 4), "2005", rep("", 4), "2010", rep("", 4), "2015", rep("", 4)) # 修正列名后调用axis axis(1, at = coefs_PA$year, labels = x_labels)
完整修正后的绘图代码
把上面的标签生成和axis代码替换你原来的对应部分,完整代码如下:
library(Hmisc) plot(coefs_PA$year, coefs_PA$estimate, xaxt='n', yaxt="n", xlab=NA, ylab=NA, pch=17, ylim = c(min(coefs_PA$estimate - coefs_PA$sd), max((coefs_PA$estimate + coefs_PA$sd)))) with(data = coefs_PA, expr = errbar(year, estimate, estimate+sd, estimate-sd, add = TRUE, cap = 0)) axis(2, las=2, at = c(-1:4, 1)) minor.tick(nx = 0, ny = 2, tick.ratio = 0.7) # 这里替换成新的X轴标签代码 x_labels <- ifelse(coefs_PA$year %in% c(2000, 2005, 2010, 2015), as.character(coefs_PA$year), "") axis(1, at = coefs_PA$year, labels = x_labels) title(ylab=expression("Logit (P"[p]*")"), line=1.6, cex.lab=1) mtext(side=3, line=0.2, "Year", font=2, cex=1.0)
这样就能实现:所有年份都保留刻度线,但只有你指定的四个年份显示标签,其余刻度线无标签的效果啦!
内容的提问来源于stack exchange,提问作者Juan Carlos
相关产品推荐
相关产品推荐

