2015-04-28 12 views
7

yansıtılmış histogramlar oluşturmak için aşağıdakimümkün mü (renk uyumlu BW eşsiz,) ben şimdiki eğilimi gibi 2 grup eşleşen istatistikler skor olacaktır

gibi yansıtılmış histogramlar kullanmak istiyorum nasıl R tabanındaki 4 farklı histogramı kaplamak için? Bu işlevselliği sağlayan herhangi bir paket var mı?

X ekseni [0,1] sınırlı (bu bir olasılıktır) ve BW sütunları her zaman daha büyük veya renkli sütunlara eşittir (yani "renkli sütunların arkasında" BW sütunları olamaz). http://www.ncbi.nlm.nih.gov/pubmed/22244556

+0

Sen başabaş (= new DOĞRU) '' ile baz grafik bindirebilirsiniz. Bu bir başlangıç. Ve [başka bir soruya bu cevap] (http://stackoverflow.com/a/3557042/3005513) yardımcı olabilir. –

+0

Teşekkürler. ´plot.histogram() ´ ayrıca add = T'yi de destekler. Zor kısım "negatif" histogramlardır. – ECII

+0

Evet. Eminim ggplot’un bunu yapmanın bir yolu var ... –

cevap

9

den

Görüntü Sen Aşağıdaki gibi bir şey kullanabilirsiniz. Doğru ylim değerlerini almak için hist nesnelerini önceden hesaplamak isteyebilirsiniz, daha sonra grafiğinizi doğru şekilde etiketlemek için axis ve mtext veya title kullanın.

set.seed(1234) 
x <- rnorm(100, 0, 1) 

plot.new() 
plot.window(ylim = c(-40, 40), xlim = range(x)) 
p <- list(axes = FALSE, xlab = "", ylab = "", main = "") 
par(new = TRUE) 
do.call(hist, c(list(x = x, ylim = c(-40, 40)), p)) 
par(new = TRUE) 
do.call(hist, c(list(x = x, ylim = c(40, -40)), p)) 
axis(side = 2, 
    at = pretty(par()$usr[3:4]), 
    labels = abs(pretty(par()$usr[3:4]))) 
axis(side = 1) 

enter image description here

DÜZENLEME

## Create some fake data 
set.seed(1234) 
d <- rnorm(250, 0, 1) 
e <- rnorm(250, 1, 1) 
f <- rlnorm(100, 0, .2) 
g <- rlnorm(100, 1, .2) 

## Function for plotting 
multhist <- function(..., bin.width, col, dir, xlab = NULL, ylab = NULL, 
        main = NULL) { 

    vals <- list(...) 
    vrng <- range(vals) 

    brks <- seq(vrng[1] - abs(vrng[1]*0.1), 
       vrng[2] + abs(vrng[2]*0.1), 
       by = bin.width) 

    yrng <- max(sapply(lapply(vals, hist, breaks = brks), "[[", "counts")) 
    yrng <- 1.2*c(-1*yrng, yrng) 

    plot.new() 
    plot.window(ylim = yrng, xlim = vrng) 

    addhist <- function(x, col, dir) { 
    par(new = TRUE) 
    hist(x = x, ylim = dir*yrng, col = col, xlab = "", ylab = "", 
     main = "", axes = FALSE, breaks = brks) 
    } 

    mapply(addhist, x = vals, col = col, dir = dir) 

    py <- pretty(yrng) 
    py <- py[py >= yrng[1] & py <= yrng[2]] 
    axis(side = 2, at = py, labels = abs(py)) 
    axis(side = 1) 
    title(main = main, xlab = xlab, ylab = ylab) 

} 

Karşılık gelen renk ve yön (1 veya 1) için fonksiyon sayısal vektörler, hem de vektörleri verebilir. Ben vals, col ve dir uzunlukları üzerinde resmi kontrol yapmadım, ama oldukça ileri doğru.

## Use the function 
multhist(d, e, f, g, bin.width = 0.5, 
     col = c("white", "white", "lightgreen", "darkgreen"), 
     dir = c(1, -1, 1, -1), xlab = "xlabel", ylab = "ylabel", 
     main = "title") 

enter image description here

4

Sen sadece örneğin aşağı arsa için negatif değerler hesaplamamız gerekir iki kez tabanını barplot kullanabilirsiniz :

upvalues <- data.frame(Green=c(0,10,90,140,30, 20),White=c(70,50,30,20,5, 0)) 
downvalues <- data.frame(Green=c(-80,-70,-10,-60,-10,-10),White=c(0,-100,-60,-5,-15, -10)) 

# barplot accept only matrices 
up <- t(as.matrix(upvalues)) 
down <- t(as.matrix(downvalues)) 

# empty plot to make room for everything 
yspace <- 1.2 # it means 20% of space for the inside labels 
plot(x=c(0,max(ncol(up))), 
    y=c(min(colSums(down))*yspace ,max(colSums(up))*yspace), 
    type='n', xaxt='n', yaxt='n', ann=FALSE) 
a <- barplot(up,col=c('green','white'),space=0,add=T) 
b <- barplot(down,col=c('darkgreen','white'),space=0,add=T,axes=F) 

axis(side=1,at=seq.int(0,by=ncol(up)/10,length.out=11), 
    labels=seq.int(0,by=10,length.out=11)) 
title(xlab = 'x label', ylab='y label', main = 'Title') 
mtext('UP',line=-1,side=3,col='green') 
mtext('DOWN',line=-1,side=1,col='darkgreen') 

enter image description here

+0

Farklı uzunluklarda Yeşil ve Beyaz vektörler için hem yukarı hem de aşağı değerlerde farklı olarak çalışmak mümkün mü? Belki de kozuluk için bir hist nesne kullanmak olsun? – ECII

+0

Bu örnek, önceden tanımlanmış ve hizalanmış çubuk değerlerinden başlar. Eğer girişinizi (farklı uzunluklarda olan) önyükleme nesnelerini kullanarak gerçekleştirirseniz, bu biçime ulaşabilir ve sonra gönderilen kodu kullanabilirsiniz. – digEmAll

+0

Bu yaklaşımı kullanarak geçersiz x değerleri oluşturur. yani. Sürekli veri için kategorik bir çizim fonksiyonu kullanmak güvenli/doğru bir yaklaşım değildir. – dayne

İlgili konular