2016-05-24 5 views
2

Мне нужен штрих-код, показывающий бар для каждого значения (даже если значение составляет 0.0002). Также важно, чтобы илим сравнивался с другими аналогичными строками. Масштабирование илим допускается, но сохранение знака важно. Любая помощь будет действительно оценена.R - barplot с y-scale, чтобы увидеть небольшие значения с помощью ggplot

data <- c(
0.0224544949, 0.040071356, 0.005862310, 
-0.0024304989, 0.025612782, 0.004551214, 
-0.0021313240, 0.026042635, 0.004003015, 
-0.0070571818, 0.001242457, -0.006225233, 
0.0001473911, 0.052633570, 0.039935131) 

bias <- matrix(data,5,3, byrow=TRUE) 
colnames(bias) <- c("H=0.55","H=0.75","H=0.95") 
rownames(bias) <- c("M1","M2","M3","M4","M5") 

dat1 <- data.frame(
Method = factor(c("M1","M2","M3","M4","M5")), 
H = factor(c(rep(c("H=0.55"),5),rep(c("H=0.75"),5),rep(c("H=0.95"),5) ), levels=c("H=0.55","H=0.75","H=0.95")), 
Bias = c(bias[,1],bias[,2],bias[,3]) 
) 


name <- paste("Parameter bias") 

ggplot(data=dat1, aes(x=H, y=Bias, fill=Method)) + 
     geom_bar(stat="identity", position=position_dodge()) + 
     ggtitle(name) +  
     theme_bw() + 
    scale_y_continuous(limits = c(-0.03,0.03)) 
+0

Это уже заговорное все. Если вам нужно держать свои весы, все, что вы действительно можете сделать, это сделать ваш сюжет действительно высоким. Если вы можете расколоть свои весы и просто пойти по меткам, фасет может помочь: 'ggplot (data = dat1, aes (x = H, y = Bias, fill = Method)) + geom_bar (stat =" identity ", position = position_dodge()) + ggtitle (name) + theme_bw() + facet_wrap (~ H, scales = 'free') ' – alistaire

+0

Вы уверены, что хотите« scale_y_continuous (пределы = c (-0.03,0.03)) 'в там? Это заставляет вас потерять некоторую информацию. Некоторые из баров вырезаются, потому что они больше, чем максимальная. См. 'M5, H = 0.75' –

ответ

0

Если вы действительно обеспокоены малых значения не появляется, вы могли бы сделать что-то вроде липкости на некоторых горизонтальных погрешностях с geom_errorbarh().

Вот пример:

#Slightly updated data, made M5, H=0.55 even smaller so that it doesnt appear in normal plot 
data <- c(
    0.0224544949, 0.040071356, 0.005862310, 
    -0.0024304989, 0.025612782, 0.004551214, 
    -0.0021313240, 0.026042635, 0.004003015, 
    -0.0070571818, 0.001242457, -0.006225233, 
    0.00001473911, 0.052633570, 0.039935131) 

bias <- matrix(data,5,3, byrow=TRUE) 
colnames(bias) <- c("H=0.55","H=0.75","H=0.95") 
rownames(bias) <- c("M1","M2","M3","M4","M5") 

dat1 <- data.frame(
    Method = factor(c("M1","M2","M3","M4","M5")), 
    H = factor(c(rep(c("H=0.55"),5),rep(c("H=0.75"),5),rep(c("H=0.95"),5) ), levels=c("H=0.55","H=0.75","H=0.95")), 
    Bias = c(bias[,1],bias[,2],bias[,3]) 
) 

Ваш текущий метод даст это:

ggplot(data=dat1, aes(x=H, y=Bias, fill=Method)) + 
    geom_bar(stat="identity", position=position_dodge(width=0.9),width=0.9) + 
    ggtitle(name) +  
    theme_bw() 

enter image description here

В приведенном выше вы можете четко видеть, что H=0.55, M5 не появляется, так как его настолько мал. Тем не менее, его все еще изображается.

Теперь с добавлением баров ошибок мы можем сделать его крошечной лентой, чтобы мы знали, что она построена.

ggplot(data=dat1, aes(x=H, y=Bias, fill=Method)) + 
    geom_bar(stat="identity", position=position_dodge(width=0.9),width=0.9) + 
    ggtitle(name) +  
    theme_bw()+ geom_errorbarh(aes(xmax=as.numeric(H)+0.45,xmin=as.numeric(H)-0.45,height=0,color=Method),position=position_dodge(width=0.9)) 

Что дает:

enter image description here

Примечание: Я вынул свой ylim код, потому что он был отрезав некоторые данные. Было бы достаточно просто приклеить его к вышеуказанному коду с помощью +scale_y_continuous(limits = c(-0.03,0.03))

+0

Спасибо, Майк, похоже, сработает. Знаете ли вы, есть ли способ сделать увеличение оси y для интервала, скажем (-0.01,0.01)? Я ищу что-то, используя шкалу журнала (с положительными малыми значениями), которая уменьшает небольшие значения (отрицательные и положительные). –

+0

Вам нужен второй график, который масштабируется только по небольшим значениям? –

+0

Для всех значений (малый и нет) Я хочу уменьшить область по оси y в интервале (-0.01,0.01) и удерживать ось y в интервале (-0,05,0,05) –

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

  • Нет связанных вопросов^_^