Я понимаю, почему вы сказали, что это странная / ужасная ось. Документация для trans_breaks
даже предупреждает вас об этом в первой строке:
Они часто не дают очень привлекательных перерывов.
Чтобы сделать его менее привлекательным, я бы использовал round(,2)
, чтобы метки моей оси имели только 2 десятичных знака вместо стандартных 8 или 9 - загромождая ось. Тогда я бы установил разумный диапазон, скажем, в вашем случае от 0 до 5 (c(0,5)
).
Наконец, вы можете указать количество тактов для вашей оси, используя n
в вызове trans_breaks
.
Итак, собрав все вместе, вы можете отформатировать ось X и ее метку в формате scale_x_sqrt(x)
:
plot <- ggplot(df,aes(a,letters)) + geom_point()
plot + scale_x_sqrt(breaks=trans_breaks("sqrt", function(x) round(sqrt(x),2), n=5)(c(0, 5)))
Производит это:
c(0,5)
передается в pretty()
, менее известную функцию Base R. Из документации pretty
делает следующее:
Вычислить последовательность из примерно n + 1 одинаково расположенных "круглых" значений, которые охватывают диапазон значений в x.
pretty(c(0,5))
просто производит [1] 0 1 2 3 4 5
в нашем случае.
Вы можете даже точно настроить свою ось, изменив параметры. Здесь код использует 3 десятичных знака (round(x,3)
), и мы попросили 3 числа тиков n=3
:
plot <- ggplot(df,aes(a,letters)) + geom_point()
plot + scale_x_sqrt(breaks=trans_breaks("sqrt", function(x) round(sqrt(x),3), n=3)(c(0, 5)))
Производит это:
РЕДАКТИРОВАТЬ на основе дополнительных комментариев ОП:
Чтобы получить округленные целые значения, floor()
или round(x,0)
работает, поэтому следующий код:
plot <- ggplot(df,aes(a,letters)) + geom_point()
plot + scale_x_sqrt(breaks=trans_breaks("sqrt", function(x) round(sqrt(x),0), n=5)(c(0, 5)))
производит это: