2

R に次のようなデータフレームがあります。

dat = data.frame(Sample = c(1,1,2,2,3), Start = c(100,300,150,200,160), Stop = c(180,320,190,220,170))

そして、x 軸が位置で、y 軸がその位置のサンプル数で、各サンプルが異なる色になるようにプロットしたいと思います。したがって、上記の例では、高さ 1 の位置、高さ 2 の位置、および高さ 3 の領域が 1 つあります。目的は、多数のサンプルがある領域と、その領域にあるサンプルを見つけることです。

つまり、次のようなものです:

      &
     ---
********-  --       **

ここで、* = サンプル 1、- = サンプル 2、& = サンプル 3

4

2 に答える 2

2

私の最初の試み:

dat$Sample = factor(dat$Sample)
ggplot(aes(x = Start, y = Sample, xend = Stop, yend = Sample, color = Sample), data = dat) + 
  geom_segment(size = 2) + 
  geom_segment(aes(x = Start, y = 0, xend = Stop, yend = 0), size = 2, alpha = 0.2, color = "black")

ここに画像の説明を入力

ここでは、2 つのセグメント ジオメトリを組み合わせます。色付きの垂直バーを描画します。これらは、サンプルが測定された場所を示しています。2 番目のジオメトリは、サンプルの密度が表示される場所の下に灰色のバーを描画します。このクイックハックを改善するためのコメントはありますか?

于 2011-12-09T13:29:56.187 に答える
1

このハックはあなたが探しているものかもしれませんが、スタッキングを利用するためにデータフレームのサイズを大幅に増やしましたgeom_histogram.

library(ggplot2)
dat = data.frame(Sample = c(1,1,2,2,3), 
                 Start = c(100,300,150,200,160), 
                 Stop = c(180,320,190,220,170))

# Reformat the data for plotting with geom_histogram.
dat2 = matrix(ncol=2, nrow=0, dimnames=list(NULL, c("Sample", "Position")))

for (i in seq(nrow(dat))) {
    Position = seq(dat[i, "Start"], dat[i, "Stop"])
    Sample = rep(dat[i, "Sample"], length(Position))
    dat2 = rbind(dat2, cbind(Sample, Position))
}

dat2 = as.data.frame(dat2)
dat2$Sample = factor(dat2$Sample)

plot_1 = ggplot(dat2, aes(x=Position, fill=Sample)) +
         theme_bw() +
         opts(panel.grid.minor=theme_blank(), panel.grid.major=theme_blank()) +
         geom_hline(yintercept=seq(0, 20), colour="grey80", size=0.15) +
         geom_hline(yintercept=3, linetype=2) +
         geom_histogram(binwidth=1) +
         ylim(c(0, 20)) +
         ylab("Count") +
         opts(axis.title.x=theme_text(size=11, vjust=0.5)) +
         opts(axis.title.y=theme_text(size=11, angle=90)) +
         opts(title="Segment Plot")

png("plot_1.png", height=200, width=650)
print(plot_1)
dev.off()

私がデータフレームを再フォーマットした方法は少し醜く、うまくスケーリングできないことに注意してください (たとえば、何百万ものセグメントや大きな開始位置と停止位置がある場合)。

ここに画像の説明を入力

于 2011-12-09T21:22:50.433 に答える