2011-07-18 5 views
4

ggplot2 wikiに記載されているようにマップを作成しています(choropleth)。私は、scale_fill_brewer()関数を介してポリゴンの塗りつぶし色に連続値をマッピングする問題に取り掛かっている点を除いて、すべてが魅力的に機能します。ggplot2でscale_fill_brewer()関数を使用してデータのブレークポイントを設定する

This questionは、私が抱えている問題を説明しています。

UPDATE:この最初の例では、実際にこの

require(gtools) # needed for quantcut() 

... 

fill_factor <- quantcut(fill_continuous, q=seq(0,1,by=0.25)) 
ggplot(mydata) + 
aes(long,lat,group=group,fill=fill_factor) + 
geom_polygon() + 
scale_fill_brewer(name="mybins", palette="PuOr") 
を行うには正しい方法です答えのように、私の回避策はgtoolsのquantcut()関数を使用してビンにまで事前にカット私のデータとなっています

ggplot(mydata) + 
aes(long,lat,group=group,fill=fill_continuous) + 
geom_polygon() + 
scale_fill_brewer(names="mybins", palette="PuOr", breaks=quantile(fill_continuous)) 

しかし、これは動作しません:私は私のデータを事前に切断する工程を省略し、休憩オプションを指定して、このような何かを行うことができるはずのよう

この作品は、しかし、私は感じています。代わりに、次のようなエラーが表示されます。

Continuous variable (composite score) supplied to discrete scale_brewer.

「ブレーク」オプションの目的を誤解しましたか?または休憩が壊れていますか?

+2

次線に沿って何か。 – hadley

+0

ありがとう、ハドリー - 答えとパッケージを書くため。私は、連続データ+休憩=離散であると仮定していたと思います。 これは、私の最初の例(私の連続データの事前切断)がこれを行うための「正しい」方法であることを意味しますか? – Peter

+1

はい。伝説は軸と変わりありません。軸上のブレークを設定してもデータが離散化するわけではなく、目盛りを動かすだけです。 – hadley

答えて

3

Hadleyが説明しているように、breaksオプションはダンプを移動させますが、データを連続させるわけではありません。したがって、問題の最初の例のようにデータを事前に切り取ることは、scale_fill_brewerコマンドを使用する正しい方法です。

4

事前切断連続データの主な問題は、コード内の異なる点で使用される3件の情報があることである。

  • ブリューワーパレットが - 使用可能な色の最大数を決定するが、
  • ブレークポイント(またはビン幅)の数 - データ
  • プロットされる実際のデータで指定されなければならない - (シーケンシャル/発散)ブリューワーパレットの選択に影響を与える

本当の悪循環です。これは、データとパレットを受け取り、自動的にブレークポイントの数を派生させ、ggplotオブジェクトに追加できるオブジェクトを返す関数を提供することで解消されます。

fill_brewer <- function(fill, palette) { 
    require(RColorBrewer) 
    n <- brewer.pal.info$maxcolors[palette == rownames(brewer.pal.info)] 
    discrete.fill <- call("quantcut", match.call()$fill, q=seq(0, 1, length.out=n)) 
    list(
    do.call(aes, list(fill=discrete.fill)), 
    scale_fill_brewer(palette=palette) 
) 
} 

このようにそれを使用します:エラーがscale_fill_brewer`は、離散データのために連続していない `言うよう

ggplot(mydata) + aes(long,lat,group=group) + geom_polygon() + 
    fill_brewer(fill=fill_continuous, palette="PuOr") 
+0

素晴らしいですが、私は "エラー:連続的な値が離散スケールに供給されました"というメッセージが表示されます。 – Julian

関連する問題