2

1 つのプロットに 2 つのヒストグラムをプロットしようとしていますが、これら 2 つのグループが分散されているため、ヒストグラムの解釈が少し難しくなっています。私のヒストグラムは次のようになります。

ここに画像の説明を入力

これは私のコードです:

hist(GROUP1, col=rgb(0,0,1,1/2), breaks=100, freq=FALSE,xlab="X",main="")  # first histogram
hist(GROUP1, col=rgb(1,0,0,1/2), breaks=100, freq=FALSE , add=T)  # second
legend(0.025,600,legend=c("group 1","group 2"),col=c(rgb(1,0,0,1/2),rgb(0,0,1,1/2)),pch=20,bty="n",cex=1.5)

2 つのグループのバーが重なり合うのではなく、隣り合ってこのヒストグラムをプロットすることは可能ですか? X 軸は連続変数を表しているため、混乱が生じる可能性があることは承知しています...このプロットをより明確にする方法についての他の提案ももちろん大歓迎です!

4

2 に答える 2

8

重複するヒストグラムをいじるのではなく、次のようにします。

  1. 別々のパネルに 2 つのヒストグラムを表示します。つまり、

    par(mfrow=c(1,2))
    d1 = rnorm(100);d2 = rnorm(100);
    hist(d1);hist(d2)
    
  2. または、密度プロットを使用します

    plot(density(d1))
    lines(density(d2), col=2)
    
  3. または、密度プロットとヒストグラムの組み合わせを使用します

    hist(d1, freq=FALSE)
    lines(density(d2), col=2)
    
于 2012-10-08T15:41:46.373 に答える
6

あなたはそれを誤用する可能性がbarplotあります:

multipleHist <- function(l, col=rainbow(length(l))) {
    ## create hist for each list element
    l <- lapply(l, hist, plot=FALSE);

    ## get mids
    mids <- unique(unlist(lapply(l, function(x)x$mids)))

    ## get densities
    densities <- lapply(l, function(x)x$density[match(x=mids, table=x$mids, nomatch=NA)]);

    ## create names
    names <- unique(unlist(lapply(l, function(x)x$breaks)))

    a <- head(names, -1)
    b <- names[-1]
    names <- paste("(", a, ", ", b, "]", sep="");

    ## create barplot list
    h <- do.call(rbind, densities);

    ## set names
    colnames(h) <- names;

    ## draw barplot
    barplot(h, beside=TRUE, col=col);

    invisible(l);
}

例:

x <- lapply(c(1, 1.1, 4), rnorm, n=1000)
multipleHist(x)

1 つのプロットに複数のヒストグラム

編集: OPが提案したようにx軸を描画する例を次に示します。IMHOこれは非常に誤解を招く可能性があり(バープロットのビンは連続値ではないため)、使用しないでください。

multipleHist <- function(l, col=rainbow(length(l))) {
    ## create hist for each list element
    l <- lapply(l, hist, plot=FALSE);

    ## get mids
    mids <- unique(unlist(lapply(l, function(x)x$mids)))

    ## get densities
    densities <- lapply(l, function(x)x$density[match(x=mids, table=x$mids, nomatch=NA)]);

    ## create names
    breaks <- unique(unlist(lapply(l, function(x)x$breaks)))

    a <- head(breaks, -1)
    b <- breaks[-1]
    names <- paste("(", a, ", ", b, "]", sep="");

    ## create barplot list
    h <- do.call(rbind, densities);

    ## set names
    colnames(h) <- names;

    ## draw barplot
    barplot(h, beside=TRUE, col=col, xaxt="n");

    ## draw x-axis
    at <- axTicks(side=1, axp=c(par("xaxp")[1:2], length(breaks)-1))
    labels <- seq(min(breaks), max(breaks), length.out=1+par("xaxp")[3])
    labels <- round(labels, digits=1)
    axis(side=1, at=at, labels=breaks)

    invisible(l);
}

1 つのプロットに複数のヒストグラム (変更された x 軸)

githubで完全なソース コードを見つけてください。

于 2012-10-08T15:50:01.613 に答える