さてさて、出発点として、ここではいくつかのサンプルデータです。それぞれはランダムであり、一方は(2,2)にシフトされている。
df1 <-
data.frame(
x = rnorm(1000)
, y = rnorm(1000)
)
df2 <-
data.frame(
x = rnorm(1000, 2)
, y = rnorm(1000, 2)
)
はビンが同一であることを確実にするために、1つの
hexbin
オブジェクトを構築するのが最善です。これを達成するために、
dplyr
の
bind_rows
を使用して、data.frameがどのデータから来たのかを追跡します(これは、grouping変数を持つ単一のdata.frameがあればさらに簡単になります)。
bothDF <-
bind_rows(A = df1, B = df2, .id = "df")
bothHex <-
hexbin(x = bothDF$x
, y = bothDF$y
, IDs = TRUE
)
次に、我々は、各セル内の各の発生をカウントするhexbin
とdplyr
のミックスを使用しています。まず、ビンに適用してテーブルを作成します(すべてのレベルが表示されていることを確認するにはfactor
を使用する必要があります。次に、それを簡略化し、mutate
で計算されたdata.frameを構築して、カウントの差を計算し、各IDのxとyの値を与えるテーブルに再び結合します。
counts <-
hexTapply(bothHex, factor(bothDF$df), table) %>%
simplify2array %>%
t %>%
data.frame() %>%
mutate(id = as.numeric(row.names(.))
, diff = A - B) %>%
left_join(data.frame(id = [email protected], hcell2xy(bothHex)))
head(counts)
います:それはより多くの制御(およびより簡単に塗りつぶしとしてカウントとは異なる変数を使用する機能)を提供していますよう
A B id diff x y
1 1 0 7 1 -1.3794467 -3.687014
2 1 0 71 1 -0.8149939 -3.178209
3 1 0 79 1 1.4428172 -3.178209
4 1 0 99 1 -1.5205599 -2.923806
5 2 0 105 2 0.1727985 -2.923806
6 1 0 107 1 0.7372513 -2.923806
は最後に、私たちは、結果のデータをプロットするためにggplot2
を使用するよりもhexbin
それ自身。そこから
counts %>%
ggplot(aes(x = x, y = y
, fill = diff)) +
geom_hex(stat = "identity") +
coord_equal() +
scale_fill_gradient2()
は、など
、軸、色で遊んするのは簡単ですあなたは一つだけのプロットを作成しました。シミュレートされたデータを構築する例を読んで、あなたの作業に似ている2つのデータセットを生成する疑似体にコードを追加してください。 –