#r #plot
#r #график
Вопрос:
Я пытаюсь выяснить, как создать график 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.
Ответ №1:
Это немного странно. Ось 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» в логарифмическом масштабе, подобном этому, будет бесконечно далеко вниз, и поэтому отрицательные числа не определены.
Комментарии:
1. Для моих целей это работает. На самом деле у меня нет отрицательных чисел, и разница на расстоянии незначительна.