You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使绘图坐标轴在原点相交并将刻度标注于该坐标轴

问题:将函数图像的刻度标注移至过原点的坐标轴

我在绘制函数 $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:34:56