2017-05-27 8 views
0

私は六角形のビンとしてバックグラウンドデータセット(以下「bDat」)をプロットしようとしています。 )。 ggplot2()を使用してこれを達成し、以下に示すMWEに可能な限り類似した構文を維持したいと思います。私はポイントをオーバーレイしようとする上記MWEで最後のコマンドを変更したときに、私はというエラーを受け取るしかしggplot2()のgeom_hex()の上にgeom_point()をプロットする

library(ggplot2) 
library(hexbin) 

set.seed(1) 
bDat <- data.frame(Group1 = rnorm(100,0,1), Group2 = rnorm(100,0,1)) 
points <- data.frame(Group1 = rnorm(10,0.5,1), Group2 = rnorm(10,0.5,1)) 
maxVal = max(max(bDat), max(points)) 
minVal = min(min(bDat), min(points)) 
maxRange = c(minVal, maxVal) 
xbins=10 
buffer = maxRange[2]/xbins 
xChar = "Group1" 
yChar = "Group2" 
x = bDat[,c(xChar)] 
y = bDat[,c(yChar)] 
h <- hexbin(x=x, y=y, xbins=xbins, shape=1, IDs=TRUE, xbnds=maxRange, ybnds=maxRange) 
hexdf <- data.frame (hcell2xy (h), hexID = [email protected], counts = [email protected]) 
attr(hexdf, "cID") <- [email protected] 

ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) + 
    geom_hex(stat="identity") + 
    geom_abline(intercept = 0, color = "red", size = 0.25) + 
    coord_cartesian(xlim = c(maxRange[1], maxRange[2]), ylim = c(maxRange[1], maxRange[2])) 

、:私は六角形の背景を取得することができています

は以下MWEでプロットオブジェクトhexIDが見つからない:evalの中

ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) + 
    geom_hex(stat="identity") + 
    geom_abline(intercept = 0, color = "red", size = 0.25) + 
    coord_cartesian(xlim = c(maxRange[1], maxRange[2]), ylim = c(maxRange[1], maxRange[2])) + 
    geom_point(data = points, aes(x=Group1, y=Group2)) 

はエラー(exprの、ENVIR、enclos):オブジェクトが

が見つかりません 'hexID' 0

ご迷惑をおかけして申し訳ございません。

+3

アドオン 'inherit.aes = false'をgeom_point''へ –

答えて

2

geomのデフォルトの動作は、ggplotオブジェクトですでに指定されている審美性を継承します。あなたの例では、

ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) 

は、デフォルトでは、すべてのgeom_*xのため、これらの値を使用するために呼び出し、yfill、およびhexID美学を発生します。これは、すべてのレイヤーが同じデータセットと美学を使用する場合にうまく機能します。

ただし、geom_point(data = points, aes(x = Group1, y = Group2))が呼び出されると、fill = countshexID = hexIDは暗黙的にgeom_pointに渡されます。 GEOM

inherit.aes = FALSEをSETINGことで

は、デフォルトの美学、むしろ よりも彼らとの組み合わせが上書きされます。これは、データと美学の両方を定義するヘルパー関数 にとって最も有用であり、デフォルトのプロット指定から の動作を継承すべきではありません。 '境界線'。あなたの最初のMWEから

last_plot() + 
    geom_point(data = points, aes(x=Group1, y=Group2), inherit.aes = FALSE) 

を取ると、結果のプロットは、次のとおりです。 enter image description here

関連する問題