Построение данных и манипулирование осью Y - PullRequest
1 голос
/ 15 апреля 2020

У меня есть такие данные, с последующей прорисовкой данных (вдохновлено этой публикацией):

x_val <- 0:250
y_val <- c(seq(0,1, 0.1), 1:10)
set.seed(1234)
data <- data.frame(x = sample(x_val, 30, replace = TRUE),
                   y = sample(y_val, 30, replace = TRUE))
library(ggplot2)
p <- ggplot(data, aes(x, y)) + geom_point()
p + scale_y_continuous(breaks = seq(0, 10, by = 1))

I будет sh, чтобы иметь половину оси Y от 0 до 1, а другая половина оси Y от 1 до 10. Любой способ сделать это?

Попытки:

Я пытался

scale_y_continuous(breaks = c(seq(0, 1, 0.1), seq(1, 10, 1)))

, Но это не работает. Я озадачен тем, как атаковать это.

РЕДАКТИРОВАТЬ : просто для ясности, я хочу следующий сюжет

plot

1 Ответ

1 голос
/ 15 апреля 2020

Масштаб, который вы рисуете, не является линейным (разница между 0 и 1 не равна разнице между 1 и 10, но линии находятся на одинаковом расстоянии друг от друга).
Поэтому вам необходимо преобразовать свои данные. В вашем случае вы ищете преобразование log10, так как расстояние от 0,1 до 1 на логарифмической шкале равно расстоянию от 1 до 10 (обратите внимание, что 0 недопустимо на логарифмической шкале):

ggplot(data, aes(x, y)) + geom_point() + scale_y_log10()

Обратите внимание, что scale_y_log10 совпадает с scale_y_continuous(trans = "log10"). Это преобразует ваши точки в лог-масштаб, сохраняя метки оси Y в исходном масштабе.
Сравните с

ggplot(data, aes(x, log(y))) + geom_point()

, который преобразует ваши точки в лог-масштабе, а также преобразует метки оси Y.

...