如何使绘图坐标轴在原点相交并将刻度标注于该坐标轴
问题:将函数图像的刻度标注移至过原点的坐标轴
我在绘制函数 $y=\frac{6x-20}{5}$ 的图像时遇到了问题:默认绘图的坐标轴位于左侧和底部。我使用abline()函数绘制了过原点的坐标轴,但刻度和数值标注仍显示在原坐标轴上,希望将它们移到这条新的过原点坐标轴上。
原代码
# Define the function f <- function(x) (6*x - 20)/5 xmin <- -3.5; max <- 7 # Plot the graph par(bg='transparent') plot(f, from=xmin, to=xmax, col="#218e8d", lwd=7, xlab="", ylab="", xlim=c(xmin,xmax), ylim=c(-5,7), bty= "n", axes="FALSE", n=20000, panel.first=c(abline(h=0, lwd=2, col="#636363"), abline(v=0, lwd=2, col="#636363"), axis(1, at=seq(-3, 7, by=1), col="#636363"), axis(2, at=seq(-5, 7, by=1), col="#636363"))) mtext("x", side=1, line=3); mtext("y", side=2, line=3)
当前效果

期望效果

解决方案
要实现刻度和标注显示在过原点的坐标轴上,核心是给axis()函数添加pos参数指定刻度绘制位置,并调整绘图顺序:
# 定义函数 f <- function(x) (6*x - 20)/5 xmin <- -3.5; xmax <- 7 # 设置背景透明 par(bg='transparent') # 先绘制函数曲线,不显示默认坐标轴 plot(f, from=xmin, to=xmax, col="#218e8d", lwd=7, xlab="", ylab="", xlim=c(xmin,xmax), ylim=c(-5,7), bty= "n", axes="FALSE", n=20000) # 绘制过原点的坐标轴 abline(h=0, lwd=2, col="#636363") abline(v=0, lwd=2, col="#636363") # 在y=0处绘制x轴刻度和标签 axis(1, at=seq(-3, 7, by=1), col="#636363", pos=0, tick=TRUE) # 在x=0处绘制y轴刻度和标签 axis(2, at=seq(-5, 7, by=1), col="#636363", pos=0, tick=TRUE) # 添加坐标轴名称,调整位置使其对齐新坐标轴中心 mtext("x", side=1, line=3, at=(xmax + xmin)/2) mtext("y", side=2, line=3, at=(7 + (-5))/2)
关键调整说明
pos=0:指定x轴刻度绘制在y=0的水平线上,y轴刻度绘制在x=0的垂直线上,直接对应你用abline画的原点坐标轴- 拆分
panel.first中的内容:先画曲线,再画坐标轴,最后加刻度,避免绘图层级覆盖问题 - 调整
mtext的at参数:让坐标轴名称居中显示在新坐标轴的上方/右侧,更贴合期望效果
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

