0

座標 (x,y) と密度に似た数値 z 値で構成される大量のデータ セットがあります。データをビニングし、要約統計 (中央値、長さなど) を実行し、ビニングされた値を ggplot の美学にマッピングされた統計を使用してポイントとしてプロットすることに興味があります。

stat_summary2d を使用して結果を手動で抽出しようとしました (この回答に基づいて: https://stackoverflow.com/a/22013347/2832911 )。ただし、私が直面している問題は、ビンの配置がデータの範囲に基づいていることです。私の場合、データ セットによって異なります。したがって、2 つのプロット間で、ビンは同じ領域をカバーしていません。

私の質問は、stat_summary2d を使用してビンを手動で設定する方法、または少なくともデータに関係なく一貫性を保つように設定する方法です。

アプローチとビンが整列しない方法を示す基本的な例を次に示します。

library(ggplot2)
set.seed(2)
df1 <- data.frame(x=runif(100, -1,1), y=runif(100, -1,1), z=rnorm(100))
df2 <- data.frame(x=runif(100, -1,1), y=runif(100, -1,1), z=rnorm(100))
g1 <- ggplot(df1, aes(x,y))+stat_summary2d(fun=mean, bins=10, aes(z=z))+geom_point()
df1.binned <-
    data.frame(with(ggplot_build(g1)$data[[1]],
                    cbind(x=(xmax+xmin)/2, y=(ymax+ymin)/2, z=value, df=1)))
g2 <- ggplot(df2, aes(x,y))+stat_summary2d(fun=mean, bins=10, aes(z=z))+geom_point()
df2.binned <-
    data.frame(with(ggplot_build(g2)$data[[1]],
                    cbind(x=(xmax+xmin)/2, y=(ymax+ymin)/2, z=value, df=2)))
df.binned <- rbind(df1.binned, df2.binned)
ggplot(df.binned, aes(x,y, size=z, color=factor(df)))+geom_point(alpha=.5)

生成するものこの画像

実際には、stat_summary2d を数回使用して、たとえば、ビン内のポイント数と中央値を取得してから を使用しますaes(size=bin.length, colour=bin.median)

私が提案したアプローチ、または別のアプローチを使用してこれを達成する方法に関するヒントは大歓迎です。

4

1 に答える 1

1

で休憩を手動で設定できますstat_summary2d。-1から1までの10レベルが必要な場合は、次のことができます

bb<-seq(-1,1,length.out=10+1)
breaks<-list(x=bb, y=bb)

そして、breaksプロットを呼び出すときに変数を使用します

g1 <- ggplot(df1, aes(x,y))+
    stat_summary2d(fun=mean, breaks=breaks, aes(z=z))+
    geom_point()

geomのを「ポイント」に変更できないので、これを一度に作成できるのは残念ですが、その適切な値と値を計算しているstat_summary2dようには見えません。stat_summary2dxy

于 2014-05-28T18:28:25.477 に答える