r - 如何在基础 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 轴正确地绘制我的数据。
解决方案
这有点奇怪。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”将无限远,因此没有定义负数。
推荐阅读
- python-3.x - 如何在不中断 python 脚本执行的情况下捕获文件中的异常?
- delphi - Delphi XE2 - 调用读取函数回调时,DFM 流随机为空或损坏
- python - 如何为神经网络提供两个不同大小的输入?
- filter - 来自列范围 X 的值匹配以返回来自同一行但不同列范围的值
- c++ - 需要有关声明未在此范围内声明的代码的代码的帮助 (C++)
- java - tkinter python程序可以镜像到android应用程序上吗
- python - 修改CustomUser模型的字段顺序
- jquery - 检测音频何时将在 Jquery 中结束
- datetime - Flutter - 将分钟转换为 H:M
- android - 从 .gradle 和 .idea 中删除所有内容是否安全?