首页 > 解决方案 > 如何在基础 R 中制作自定义 y 轴刻度

问题描述

我正在尝试弄清楚如何R使用自定义 y 轴比例绘制绘图。例如,我想制作一个与下面具有相同 y 轴的图。即使实际数字距离不同,您也可以刻度线之间的距离相同。

在此处输入图像描述

为了实现相同的轴外观,我可以执行以下操作:

set.seed(1)

n <- 10
x <- 1:n
y <- rnorm(n)

ticks <- c("1/30","1/10","1/3","1","3","10","30")


plot(x, y, axes = FALSE, ylim = c(-3,3))
axis(1)
axis(2, seq(-3,3,1), ticks)

结果如下:

在此处输入图像描述

但是,图中的数据都在错误的位置,因为它与新的 y 轴刻度不匹配。所以我想要的是在 y 轴上获得我想要的任何比例,然后能够根据 y 轴正确地绘制我的数据。

标签: rplot

解决方案


这有点奇怪。y 轴几乎是对数的,但不完全是对数,因为刻度线在比下面的大 3 倍和 3.333 倍之间交替出现。这不适合直接转换。但是,如果我们对 y 轴位置和 y 值本身进行对数变换,我们可以使标记和绘图位置准确,但代价是刻度线的间距略微不均匀。

set.seed(1)

n <- 10
x <- 1:n
y <- rnorm(n)

ticks <- c("1/30","1/10","1/3","1","3","10","30")

tick_nums <- c(1/30, 1/10, 1/3, 1, 3, 10, 30)

plot(x, log(y, 3), axes = FALSE, ylim = c(-3,3))
#> Warning in xy.coords(x, y, xlabel, ylabel, log): NaNs produced
axis(1)
axis(2, at = log(tick_nums, 3), ticks)

我们可以通过以下方式显示这些点位于正确的位置:

text(x = x, y = log(y * 1.3, 3), label = round(y, 3))

请注意,不能在此比例上绘制任何负值,因为像这样的对数比例上的“0”将无限远,因此没有定义负数。


推荐阅读