2014-04-14 4 views
1

У меня есть этот пример в R:barplot в R с использованием различных классов

mat2 
##  Bos_RM Bos_SM Jac_AGM Jac_RM 
## t34340 22.67389 NA  14 19.60895 
## t60337 18.00000 12.0  NA 19.60895 
## t71357 22.67389 9.5  11 19.60895 

bar = barplot2(t(mat2), 
     beside = TRUE, 
     col = c("red","green","blue","orange"), 
     # legend = colnames(mat2), 
     ylim = c(0, max(na.omit(mat2))+1), 
     ylab="-logpvalue", 
     #xaxt='n', 
     #xlab="", 
     ) 
box() 

, производящего эту цифру:

descricao da imagem

Я хотел бы, чтобы произвести эту фигуру без этих пространства (созданный NA с).

+1

фигура не появляется и 'dput (MAT2)' было бы полезно. – hrbrmstr

+0

добавил участок для вас – hrbrmstr

ответ

1

Если вы можете использовать ggplot2, это будет делать это для вас:

mat2 <- read.table(textConnection("Bos_RM Bos_SM Jac_AGM Jac_RM 
t34340 22.67389 NA  14 19.60895 
t60337 18.00000 12.0  NA 19.60895 
t71357 22.67389 9.5  11 19.60895")) 

# convert transpose to data frame 
dat <- data.frame(t(mat2)) 
dat$b <- rownames(dat) 
rownames(dat) <- NULL 

# melt the data for ggplot2 plot 
q <- melt(dat) 

# plot only the bars that aren't NA 
gg <- ggplot(na.omit(q), aes(x=variable, y=value, group=b)) 
gg <- gg + geom_bar(stat="identity", aes(fill=b), position="dodge") 
gg <- gg + labs(x="", y="-logpvalue", title="") 
gg 

Изменение b к тому, что имеет смысл для сюжета.

enter image description here

+0

Огромное вам спасибо ;-) – quelopes

+0

Знаете ли вы, можно ли считать имена на оси х ближе к барам, и эти имена появляются отдельно для каждой группы? Best, – quelopes

+0

Попытка выяснить, что вам нужно. Итак, вы хотите удалить пробел между «t34340» и т. Д.? Кроме того, вы хотите наклейки «Bos ...» и «Jac ...»? – hrbrmstr

1

Вот базовый раствор:

v <- as.vector(t(mat2)) 
bar = barplot(v, 
     beside = TRUE, 
     width = as.integer(!is.na(v)), # set widths based on missingness 
     space = rep(c(1,0,0,0),3), # manually set spacing 
     col = c("red","green","blue","orange"), 
     ylim = c(0, max(na.omit(mat2))+1), 
     ylab="-logpvalue" 
     ) 

enter image description here

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