0

次のデータとプロットがあります。

pos <- rep(1:2000, 20)
xv =c(rep(1:20, each = 2000))
# colrs <- unique(xv)
colrs <- xv # edits 
yv =rnorm(2000*20, 0.5, 0.1)

xv   = lapply(unique(xv), function(x) pos[xv==x])
to.add = cumsum(sapply(xv, max) + 1000)

bp <- c(xv[[1]], unlist(lapply(2:length(xv), function(x) xv[[x]] + to.add[x-1])))
plot (bp,yv, pch = "*", col = colrs)

ここに画像の説明を入力

このプロットには、理解できない問題がいくつかあります。

(1)グループごとに違う色を使いたい、グループごとに違う色を使いたい(xv)のですが、綺麗に混ざり合うという観点からカラー関数を試してみました。いくつかのポイントを強調する必要がありますが (たとえば bp 4000 から 4500 を青色で)

(2) bp 位置の代わりに、グループに目盛りとラベルを付けたい。

ありがとうございます。

編集:次の回答の助けを借りて(各グループの数のバランスが取れていない場合は、わずかに異なるアプローチで機能します)、同様のプロットを取得できました。しかし、色に関して残っている質問は、代替グループで2つの代替色を使用したい場合はどうすればよいですか?

4

4 に答える 4

1

次のように、各グループにポイントがプロットされている回数にかかわらず、カラー インデックスを繰り返すことで色の問題を解決できます。

plot (bp,yv, pch = "*", col = rep(colrs,each=2000))

デフォルトのカラー パレット (?paletteまたはを参照palette()) はそれ自体をラップしており、独自のカラー パレットを指定して 20 の異なる色を取得することができます。

x 軸のラベルを変更するには、軸なしでプロットしてから、点とラベルを手動で指定してみてください。

plot (bp,yv, pch = "*", col = rep(colrs,each=2000),xaxt="n")
axis(1,at=seq(1000,58000,3000),labels=1:20)

そこにたくさんのラベルを詰め込もうとしている場合は、テキストを縮小する ( cex.axis) か、ラベルを 90 度回転させる ( ) 必要があるかもしれませんlas=2

plot (bp,yv, pch = "*", col = rep(colrs,each=2000),xaxt="n")
axis(1,at=seq(1000,58000,3000),labels=1:20,cex.axis=0.7,las=2)

結果:

ここに画像の説明を入力

于 2012-04-26T05:58:34.470 に答える
1

あなたの実際のデータは、20 の異なるグループからの 2000 の値のようなものであると推測します。たとえば、20 の異なる種の 2000 の植物の高さ。このような場合、パッケージ内のdotplot()関数 (または下図のdotplot.table()) を参照することをお勧めします。lattice

仮説値の行列を生成します。

set.seed(1)

myY <- sapply( seq_len(20), function(x) rnorm(2000, x^(1/3)))

行列を転置してグループを行として取得する

myY <- t(myY)

グループの名前をマトリックスに提供します。

dimnames(myY)[[1]]<-paste("group", seq_len(nrow(myY)))

latticeパッケージをロード

library(lattice)

ドットプロットを生成

dotplot(myY, horizontal = FALSE, panel = function(x, y, horizontal, ...) {
  panel.dotplot(x = x, y = y, horizontal = horizontal, jitter.x = TRUE,
    col = seq_len(20)[x], pch = "*", cex = 1.5)
  }, scales = list(x = list(rot = 90))
)

次のようになります (y 軸のラベリングが残念です):

ドットプロット

于 2012-04-26T10:54:30.843 に答える
1

@JohnCLK がx軸の値で色付けする方法を要求しているのを見て、これらのデモを試してみました。ggplot2各デモでは、値または範囲に基づいてコード化されたダミー変数を使用して、他の変数で強調表示します。

したがって、最初に質問のようにデータを設定します。

pos <- rep(1:2000, 20)
xv <- c(rep(1:20, each = 2000))
yv <- (2000*20, 0.5, 0.1)
xv <- lapply(unique(xv), function(x) pos[xv==x])
to.add <- cumsum(sapply(xv, max) + 1000)
bp <- c(xv[[1]], unlist(lapply(2:length(xv), function(x) xv[[x]] + to.add[x-1])))

次に、 をロードggplot2し、いくつかのユーティリティ関数を準備して、デフォルトのテーマを設定します:

library("ggplot2")

make.png <- function(p, fName) {
    png(fName, width=640, height=480, units="px")
    print(p)
    dev.off()
}

make.plot <- function(df) {
    p <- ggplot(df, 
                aes(x = bp,
                    y = yv, 
                    colour = highlight))
    p <- p + geom_point()
    p <- p + opts(legend.position = "none")
    return(p)
}

theme_set( theme_bw() )

縦軸の定義された範囲の値を強調するプロットを描く:

# highlight a horizontal band
df <- data.frame(cbind(bp, yv))
df$highlight <- 0
df$highlight[ df$yv >= 0.4 & df$yv < 0.45 ] <- 1
p <- make.plot(df)
print(p)
make.png(p, "demo_horizontal.png")

横帯

次に、軸上の定義された範囲内の値を強調表示するプロットを描画します。これxは垂直バンドです。

# highlight a vertical band
df$highlight <- 0
df$highlight[ df$bp >= 38000 & df$bp < 42000 ] <- 1
p <- make.plot(df)
print(p)
make.png(p, "demo_vertical.png")

垂直バンド

x最後に、交互の垂直バンドを値で強調表示するプロットを描画します。

# highlight alternating bands
library("gtools")
alt.band.width <- 2000
df$highlight <- as.integer(df$bp / alt.band.width)
df$highlight <- ifelse(odd(df$highlight), 1, 0)
p <- make.plot(df)
print(p)
make.png(p, "demo_alternating.png")

交代バンド

お役に立てれば; とにかく良い練習になりました。

于 2012-04-27T23:17:57.260 に答える
1

1 つの方法は、ネストされた を使用することですifelse
私はまだ学んRでいますが、それができる1つの方法は次のようになります:

plot(whatev$x, whatev$y, col=ifelse(xv<2000,red,ifelse(2000<xv & xv<4000,yellow,blue)))  

色と間隔に特異性を持たせるために、これらをいくつでもネストできます。ifelseコマンドの形式はifelse(TEST, True, False).

より簡単な方法は、xv の一意のグループを使用して虹色を割り当てることです。

colrs=rainbow(length(unique(xv)))  #Or colrs=rainbow(length(xv)) if xv is unique.
plot(whatev$x, whatev$y, col=colrs)

私はすべてが正しいことを願っています。私はまだRを自分で学んでいます。

于 2012-04-26T08:36:01.643 に答える