18

假设我想绘制x^2. 我可以使用curve()如下。

curve(x^2, -5, 5)

在此处输入图像描述 但是,我希望轴通过 (0, 0)。我可以做如下事情:

curve(x^2, -5, 5, axes=FALSE)
axis(1, pos=0)
axis(2, pos=0)
abline(h=0)
abline(v=0)

我最终得到了类似下面的东西,看起来不错。但我唯一的抱怨是,这种绘制轴的方式使实际轴 - 例如 x 轴的 -4 和 4 之间的段 - 比右侧和左侧的段厚。y轴也是如此。我想知道是否有更好的方法来绘制坐标轴。谢谢!

在此处输入图像描述

4

2 回答 2

16

默认情况下,axis() 自动计算刻度线位置,但您可以使用at参数手动定义它们。所以解决方法可能是这样的:

curve(x^2, -5, 5, axes=FALSE)
axis(1, pos=0, at=-5:5)
axis(2, pos=0)

这使 :

在此处输入图像描述

问题是您必须手动确定每个刻度线的位置。更好的解决方案是使用axTicks函数(默认使用的函数)计算它们,但使用自定义axp参数调用此函数,该参数允许您分别指定轴中刻度的最小、最大和间隔数:

curve(x^2, -5, 5, axes=FALSE)
axis(1, pos=0, at=axTicks(1,axp=c(-10,10,10)))
axis(2, pos=0)

这使 :

在此处输入图像描述

于 2013-01-26T18:18:04.953 回答
3

绘图周围的参数yaxsxaxs控制间距。设置"i"为省略此:

curve(x^2, -5, 5, yaxs = "i")

另请参阅:https ://stackoverflow.com/a/12300673/567015

于 2013-01-28T08:54:51.823 回答