2016-03-31 10 views
1

私はuserid、緯度、経度、mbを持つデータフレームsampを持っています。私は使用されたMBに比例した点で地図をプロットしたいと思っていました。私はgeom_pointにドーナツの形が欲しかったので、私はpchのドーナツ形を得るためにさまざまなサイズの2つのpch = 20を使うことができると思った。しかし、私はそれにいくつかの問題に直面しています。ggplot2/ggmap:プロットと凡例の両方に2色のポイントマーカーを使用する

m <- get_map(location=c(lon=median(samp$longitude),lat=median(samp$latitude)), zoom=10) 
print(ggmap(m) + 
     geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="orange", pch = 20, data=samp) + 
     geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="black", pch = 20, size = 4, data=samp)) 

が、私のようなものを取得しています、

enter image description here

形状にもマップ全体ではありません。私は、形状がmb.userの値に比例して比例するようにしたい。しかし、ここの地図はmb.userやサイズに比例していません。

また、凡例には1色しか表示されません。一緒に2色を表示していません。私は理想的には、大きさがmb.userに比例するドーナツ型のシンボルを持っていたいと思っています。

誰でも私がここでやっている間違いを見つけるのを助けることができますか?

おかげ

答えて

1

あなたが境界線を持っているポイントの形状を使用する場合は、あなただけの一度の点をプロットすることができ、それは伝説で正しく表示されます。 ggplot2バージョン2がインストールされている場合(最新のバージョンは2.1.0)、strokeパラメータを使用してポイントボーダーの幅を制御することもできます。

ggplot(mtcars, aes(wt, mpg)) + 
    geom_point(aes(size=mpg), colour="red", fill="black", shape=21, stroke=1.5) + 
    scale_size_area(max_size=4) 

shape=21は(利用可能な形状のため?pchを参照)の境界線で埋め円です:あなたはので、ここで内蔵のmtcarsデータフレームを使用した例ですが、再現性の例を提供していません。 colourは境界線の色を設定し、fillは塗りつぶし色を設定し、strokeは境界線の幅を設定します。あなたの元のコードについて

enter image description here

あなたもaesに呼び出し外size=4を設定することでsize=mb.userをオーバーライドしてきたので、黒丸は、すべて同じサイズです。黒い点がオレンジの点よりも大きい場合、オレンジの点のいくつかを見ることはできません。 size=4を削除してをaesに入れると、オレンジ色の点の中に適切にスケーリングされた黒い点が得られます。

しかし、それでも凡例の問題は解決しません。私はgeom_pointへの2回の別の呼び出しを使用して、ブラックインサイドオレンジポイントの伝説を得る方法はないと考えています(少なくとも私が考えることはできません) 。一度の呼び出しでgeom_pointを塗りつぶしても問題は解決しますが、元のコードが期待どおりに機能しなかった理由を説明することをお勧めします。

関連する問題