2011-04-01 7 views
17

私はすべての風速である3つの変数を持つデータフレームを持っています。私はハードウェアがどれほどうまく調整されているかをチェックしたい。この例では3つありますが、最大6つある可能性があります。異なる変数を除いて、ggplotでファセットを作成する方法

これは、xyのパラメータが変化し続ける3つの異なるグラフになります。私はファセットを使ってこれらをプロットするか、同じ外観のものを実際にプロットしたいと思います。ここで

windと呼ばれるデータフレームに、いくつかのサンプルデータです:

wind <- structure(list(speed_60e = c(3.029, 3.158, 2.881, 2.305, 2.45, 
2.358, 2.325, 2.723, 2.567, 1.972, 2.044, 1.745, 2.1, 2.08, 1.914, 
2.44, 2.356, 1.564, 1.942, 1.413, 1.756, 1.513, 1.263, 1.301, 
1.403, 1.496, 1.828, 1.8, 1.841, 2.014), speed_60w = c(2.981, 
3.089, 2.848, 2.265, 2.406, 2.304, 2.286, 2.686, 2.511, 1.946, 
2.004, 1.724, 2.079, 2.058, 1.877, 2.434, 2.375, 1.562, 1.963, 
1.436, 1.743, 1.541, 1.256, 1.312, 1.402, 1.522, 1.867, 1.837, 
1.873, 2.055), speed_40 = c(2.726, 2.724, 2.429, 2.028, 1.799, 
1.863, 1.987, 2.445, 2.282, 1.938, 1.721, 1.466, 1.841, 1.919, 
1.63, 2.373, 2.22, 1.576, 1.693, 1.185, 1.274, 1.421, 1.071, 
1.163, 1.166, 1.504, 1.77, 1.778, 1.632, 1.545)), .Names = c("speed_60e", 
"speed_60w", "speed_40"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30")) 

R> head(wind) 
    speed_60e speed_60w speed_40 
1  3.029  2.981 2.726 
2  3.158  3.089 2.724 
3  2.881  2.848 2.429 
4  2.305  2.265 2.028 
5  2.450  2.406 1.799 
6  2.358  2.304 1.863 

私は3つの平方のグラフをプロットしたいです。個々のものは呼び出してプロットすることができます

ggplot() + geom_point(data=wind, aes(wind[,1],wind[,3]), alpha=I(1/30), 
         shape=I(20), size=I(1)) 

どうすればいいですか?

+0

+1 dput()の結果を使ってデータを共有するには – Andrie

答えて

25

このようなことはありますか?

pairs plotting in ggplot

ハドレーが、これは "原油実験散布図" と呼ぶが、それはあなたのニーズに十分かもしれません:与え

plotmatrix(data = wind) + geom_smooth(method="lm") 

編集:現在、plotmatrix()geom_point()層の仕様について@クリスの要件のすべてを処理するのに十分な、非常に柔軟ではありません。しかし、plotmatrix()の中から、ハドレーの素敵なコードを使ってプロットに必要なデータ構造を作成することはできますが、プロットするには標準ggplot()を使用するのが好きです。この機能も密度を落としますが、plotmatrix()のコードを調べて、それらを取得する方法をご覧ください。

まず、データをワイドフォーマットから反復フォーマットに展開してペアプロットに必要な関数を作成します。このプロットでは、各変数を1つおきにプロットします。

Expand <- function(data) { 
    grid <- expand.grid(x = 1:ncol(data), y = 1:ncol(data)) 
    grid <- subset(grid, x != y) 
    all <- do.call("rbind", lapply(1:nrow(grid), function(i) { 
     xcol <- grid[i, "x"] 
     ycol <- grid[i, "y"] 
     data.frame(xvar = names(data)[ycol], yvar = names(data)[xcol], 
        x = data[, xcol], y = data[, ycol], data) 
    })) 
    all$xvar <- factor(all$xvar, levels = names(data)) 
    all$yvar <- factor(all$yvar, levels = names(data)) 
    all 
} 

注:これはないすべてplotmatrix()からハドレーのコードを盗むである - 私はここに空想何もしませんでした。

データを展開します。

wind2 <- Expand(wind) 

今、私たちはggplot()が必要とするその他の長い形式のデータオブジェクトとしてこれをプロットすることができます。

ggplot(wind2, aes(x = x, y = y)) + 
    geom_point(alpha = I(1/10), shape = I(20), size = I(1)) + 
    facet_grid(xvar ~ yvar, scales = "free") 

あなたが密度をしたい場合は、我々は引き出すことができますコード2のそのビットをヘルパー関数に置き換えます。

makeDensities <- function(data) { 
    densities <- do.call("rbind", lapply(1:ncol(data), function(i) { 
     data.frame(xvar = names(data)[i], yvar = names(data)[i], 
        x = data[, i]) 
    })) 
    densities 
} 

次に、d

dens <- makeDensities(wind) 

、次いでplotmatrix()からのコードの同じビットを使用して、その後追加:

ggplot(wind2, aes(x = x, y = y)) + 
     geom_point(alpha = I(1/10), shape = I(20), size = I(1)) + 
     facet_grid(xvar ~ yvar, scales = "free")+ 
     stat_density(aes(x = x, y = ..scaled.. * diff(range(x)) + min(x)), 
        data = dens, position = "identity", colour = "grey20", 
        geom = "line") 

Iは、上記示した元の図形の完全なバージョンが、抽出されたコードを使用してデータのensities次のようになります。

ggplot(wind2, aes(x = x, y = y)) + 
     geom_point(alpha = I(1/10), shape = I(20), size = I(1)) + 
     facet_grid(xvar ~ yvar, scales = "free")+ 
     stat_density(aes(x = x, y = ..scaled.. * diff(range(x)) + min(x)), 
        data = dens, position = "identity", colour = "grey20", 
        geom = "line") + 
     geom_smooth(method="lm") 

寄付:

custom version of the pairs plot

+0

+1 plotmatrix()について教えてください。 – Andrie

+0

私はさらに投票することができます。この作業量にはいくつかの追加ポイントが必要です。一番良いことは次のとおりです:私はロンドンに来るときに別に連絡し、ビールを買うでしょう。 – Andrie

+0

私はこれを永遠にupvoteできることを望みます。 –

4

最初にデータを溶かします(長形に変換します)。

ポイントをプロットする場合は、x軸のインデックス変数を追加する必要があります。 GGallyパッケージから

+0

これは私にとっても役に立ちました - 私はデータを溶かしようとしましたが、IDとして何を使うべきか分からなかったので、ありがたいです。 – Chris

+0

@Chrisの問題は、これが非標準的な融解であることです。 1つの変数を他の変数に対してプロットできるように、データを長い形式で複製/複製する必要があります。シンプルなメルトはうまくいきません。そのため、Hadleyは 'plotmatrix()'のコードに行きました。メルトがうまくいけば、代わりにメルトが使われていたでしょう。 –

2

ggpairsは、データフレーム内の各変数の簡単な比較のために、非常にいいです:

ggpairs(wind) 

GGally default plot with wind data

また、数値や要因データの比較を処理します。

関連する問題