R ggplot2 — простой график — нельзя указать пределы логарифмической оси

Я пытаюсь создать простой график плотности в R в ggplot2. Вот мой код, который отлично работает.

d <-  ggplot(result, aes(x=result$baseMeanA)) 
d + geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
scale_x_log10() + scale_y_continuous(limits = c(0, 0.45))

Проблема в том, что я не могу настроить ось X, как хотелось бы, на отрицательные числа.

scale_x_log10(limits= c(1, 10000))

отлично работает, но

scale_x_log10(limits= c(-1, 10000))

вообще не работает! Это дает мне эту ошибку:

Ошибка в if (zero_range(range)) { : отсутствует значение, где требуется TRUE/FALSE

Пожалуйста помоги!


person user1678000    schedule 17.09.2012    source источник
comment
Просто предположение, но, возможно, вы хотите, чтобы пределы исходной шкалы изменялись от 0,1 до 10000 (т. Е. log10 (x) изменяется от -1 до 5)? Предположительно, вы не хотите, чтобы log10(x) изменялся от -1 до 10000, потому что тогда верхний предел будет равен 10^10000 (очень большое значение, так как имеется около 10^80 атомов). в наблюдаемой вселенной en.wikipedia.org/wiki/Observable_universe ... ) Если я правильно, тогда вы хотите scale_x_log10(limits=c(0.1,1e5))   -  person Ben Bolker    schedule 17.09.2012
comment
Да, кажется, теперь я понимаю. Я не могу использовать отрицательные числа в логарифмической шкале. Спасибо. Теперь я вижу, что мне нужно сделать, мне нужно добавить к результату псевдочисло типа 1 или 0.1, чтобы визуально это выглядело правильно, иначе я как-нибудь потеряю все очень маленькие числа.   -  person user1678000    schedule 18.09.2012


Ответы (3)


Если диапазон пределов должен быть частично ниже нуля, вы можете преобразовать свою переменную в log10 и указать пределы для непрерывной шкалы:

ggplot(result, aes(x=log10(baseMeanA))) +
   geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
   scale_x_continuous(limits = c(-1, 10000) + 
   scale_y_continuous(limits = c(0, 0.45)) +
person Sven Hohenstein    schedule 17.09.2012

То, что вы пытаетесь сделать, не имеет особого смысла, не так ли? Журнал отрицательных чисел — это не то, что мы можем представить в R.

R> log(-1)
[1] NaN
Warning message:
In log(-1) : NaNs produced

так где же R должен провести ось?

person Gavin Simpson    schedule 17.09.2012
comment
Да, вы правы, наверное. Я не знал этого. Думаю, теперь я знаю, что для решения моей задачи мне нужно добавить к моему результату псевдочисло, чтобы я мог его визуально посмотреть. - person user1678000; 18.09.2012

e^y не может быть отрицательным. Экспоненциальная константа e положительна, а y — просто показатель степени. и по математическому определению:

журнал (х) = у ‹==> х = е ^ у

Именно поэтому R не может вычислить log(x), если x отрицательно. Это просто противоречит математическому определению.

Надеюсь, это поможет понять, почему этот сюжет доставляет вам неприятности.

person JAponte    schedule 12.10.2012