2014-01-04 4 views
2

Мне нужно построить с пакетом ggplot2 в R график с некоторыми отрицательными значениями с использованием логарифмической шкалы x.Плоские отрицательные значения в логарифмической шкале с ggplot 2

Например, я хочу, чтобы построить эти точки с помощью рентгеновского логарифмической шкалы

x <- c(-1,-10,-100) 
y <- c(1,2,3) 

Я знаю, что логарифм отрицательного значения в R pronuces значения NA, но мне нужен результат: click to view the picture

Возможно ли использовать usb ggplot2?

ответ

5

Есть две проблемы, которые необходимо решить - вычислить журнал с отрицательными значениями, а затем объединить логарифмическую шкалу и обратную шкалу.

Для объединения бревен и реверсивных весов вы можете использовать решение, предоставленное @Briand Diggs на this SO question.

library(scales) 
reverselog_trans <- function(base = exp(1)) { 
    trans <- function(x) -log(x, base) 
    inv <- function(x) base^(-x) 
    trans_new(paste0("reverselog-", format(base)), trans, inv, 
       log_breaks(base = base), 
       domain = c(1e-100, Inf)) 
} 

Чтобы заставить его работать с отрицательными значениями, обеспечивает x значения как -x в ggplot() вызова, а затем использовать другое преобразование для labels=scale_x_continuous() внутри, чтобы получить обратно отрицательные значения.

df<-data.frame(x=c(-1,-10,-100),y= c(1,2,3)) 
ggplot(df,aes(-x,y))+geom_point()+ 
    scale_x_continuous(trans=reverselog_trans(base=10), 
        labels=trans_format("identity", function(x) -x)) 

enter image description here

+1

Другой question..what я должен делать, если у меня есть положительные данные по оси х? Например, «x <- c (-10,1,10)» ... – Dalmo1991

+0

Как же вы объясняете возможность использования осей для масштабирования в диаграммах движения, даже с отрицательными значениями? – CBechet

Смежные вопросы