0

人口の正味の変化を示すレイヤーを含むggplot一連のベースマップを表示するために使用しています。stat_summary_hexの値を再スケーリングするには、とによって生成されscale_fill_gradientnた を知る必要があります。minmax ..value..stat_summary_hex

簡単な例を次に示します。

Hex_Summary <- stat_summary_hex(aes(x = Lon, y = Lat, z = Churn),
   bins=100, colour = NA, geom = "hex", fun = function(x) sum(x))

関数によって生成される最小値と最大値を取得するために、次のことを試しましたfun

PlotEnv <- ggplot() + HexSummary
PlotData <-ggplot_build(PlotEnv)  

BinnedValues <- PlotData[["data"]][[1]]$value
BinMin <- min(BinnedValues) 
BinMax <- max(BinnedValues)

ただし、ggplot_buildアクセスできたデータ ( PlotData[["data"]][[1]]$value) は、実際のプロットの値と一致しません。

Henrik のコメントによると、プロットに geom_text を追加すると、

hexlab <- stat_summary_hex(geom="text",
  aes(x = Lon, y = Lat, z = Churn, label=..value..), size = 1, color="black",
  fun = function(x) (sum(x)))

ビニングされた六角形の最大値は 79 です。しかし、私がするとき

PlotData[["data"]][[1]]$value

これはプロットの背後にあるデータであると想定しましたが、最大値はわずか 29 であることがわかります。また、の行数は、PlotData[["data"]][[1]]プロットされた六角形の数と等しくありません。ggplot_build を使用することは、ビン化された関数の結果を確認する正当な方法ではないようです。

一般に、関数からのすべての座標と値を含むデータ フレームにアクセスするためのより良いstat_summary_hex方法はありますか。または、 stat_summary_hexステートメント内の関数によって生成される最小値と最大値を単純に決定する適切な方法はありますか?

編集:正確に何が違うかを文書化した後、原因を見つけました:私の実際の機能は、最初に与えられた例よりも複雑でした:

stat_summary_hex(aes(x = Lon, y = Lat, z = Churn),
  bins=100, colour = NA, geom = "hex", drop = TRUE,
  fun = function(x) if(abs(sum(x)) > 5) {sum(x)} else {NA})

これが他のヘクス位置の合計に影響する理由は理由ではありません。たとえば、合計が 79 であるはずの特定のセルでは、最大値ggplot_buildは 29 でしたが、関数を変更して set を設定するとdrop = F、79 の期待値が表示されます。

4

0 に答える 0