2015-08-17 3 views
1

Привет от чтения и игры с некоторыми данными, кажется, что ggplot может отбрасывать нули, когда он делает сюжеты, такие как boxplots. По-видимому, у него есть некоторые проблемы при обработке нулей в масштабе журнала. Когда я занимаюсь коробками, я постоянно получаю предупреждения. Второй я предполагаю, что это удаление ВПЛ, но первое выглядит, как она может быть сбросив нулиggplot отбрасывает нули из boxplot?

Removed x rows containing non-finite values (stat_boxplot) 
Removed x rows containing missing values (stat_summary) 

, например

library(ggplot2) 

df = read.table(text="X1 X1.1 X1.2 X1.3 X2 X2.1 X2.2 X2.3 
     1 0 3 4 3 2 3 1 
     2 'NA' 5 5 5 2 1 2 
     2  'NA' 2 1 2 1 2 5", header=TRUE) 

dfmelt<-melt(df) 

ggplot(dfmelt, aes(variable, value, fill=variable)) + 
geom_boxplot() + 
theme(axis.text.x=element_text(angle=90))+ 
scale_x_discrete(labels=c('C1','C2','C3','C4','C5','C6','C7','C8'))+ 
scale_fill_manual(values=rep(c("red","green","blue","yellow"),2))+ 
stat_summary(fun.y = median, geom = "point", position =  position_dodge(width = .9))+ 
scale_y_log10() 

мне было интересно, если это происходит только при выполнении логарифмической шкалы? Если это может повлиять на сам блокнот как в его позиционировании, так и в медианном? Могут ли данные с несколькими нулями и ненулевыми значениями потерять все нули, сдвинув поле? И если да, то как лучше справиться с этим, так что ggplot не искажает мои данные?

благодаря

+1

Вы не можете взять 'журнал' из' 0'. Введите 'log10 (0)' в консоли и вернет '-Inf'. – Jaap

+0

Я преобразовывал (регистрировал) свои данные перед графиком. Кажется, что должны быть предупреждения о том, чтобы удалить данные (в моем случае значения были уже «-Inf» после преобразования. Я заметил проблему, потому что у моих полей ячеек «n =» на них было другое. Мое решение было чтобы взять 'log (x + 1)' во время преобразования. – Fuhrmanator

ответ

2

0 не определено для логарифмической шкалы, которая, скорее всего, ggplot избавляется от них. Математически нет математического представления 0 в шкале журнала.

+2

Для рядов, которые принимают целые значения, однако, «log (x + 1)» часто является разумной альтернативой. Количество событий - один из примеров. – ulfelder

+0

хорошо, но если у вас есть сочетание нулевых и ненулевых значений, поле и медианная метка будут находиться в неправильном положении, если нули все сброшены правильно? Как вы можете справиться с этим? Я понимаю, что вы не можете сами представлять нуль, но насколько это статистически приемлемо просто отбросить все нулевые значения из группы данных и сделать свой boxplot с остальными ненулевыми значениями? Разве это не испортит график? Мне просто кажется странным, что это поведение по умолчанию без простого обхода. –

+1

Я бы не стал представляют собой серию как в шкале журнала, но если я действительно хочу это сделать, я бы использовал подход ulfelder добавления 1 к существующим данным. И в отношении беспорядка коробки, это наименее беспорядочно, так как среднее значение log (c (0,1, 1)) минус бесконечность. Попробуйте '' 'mean (log (c (0,1,0)))' '', который иллюстрирует это. По-моему, ggplot делает то, что должен, или, по крайней мере, минимальный урон. :) –

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