2012-05-13 8 views
5

@Mikeと同じ問題がthis questionにあります。問題は、マッププロットの領域のアウトラインカラーを設定する方法です。geom_map ggplot2の境界 - 再訪

提案されている解決方法では、境界線をプロットするためにgeom_polygonを追加します。全体領域がプロットされている限り、これは機能します。サブ領域に制限しようとすると、ポリゴンが奇妙に描画されます(おそらく、いくつかの頂点がドロップされるためです)。標準geom_map例を使用:

# Create example data 
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) 
values <- data.frame(id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5)) 
positions <- data.frame(
    id = rep(ids, each = 4), 
    x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), 
    y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) 
) 

# Plot data 
ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id), map = positions) + 
    geom_polygon(aes(x,y,group=id), fill = NA, colour = 'red', data = positions) + 
    expand_limits(positions) + 
    ylim(0, 3) 

可能な回避策は次のように、scale_colour_manualとアウトラインの色を選択し、手動で、その後geom_mapに色の美学を使用している:

ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id, colour = 'white'), map = positions) + 
    scale_colour_manual(values=c('white')) + 
    expand_limits(positions) + 
    ylim(0, 3) 

だから私は二つの質問があります

  1. geom_polygonは、軸の制限が抑制されていると正しく機能しないのはなぜですか?
  2. ここに示したものより輪郭を描くもっと洗練されたソリューションがありますか?

以下はプロット出力です。事前に多くの感謝。

Did not work properly using geom_polygon Works but is not very elegant

答えて

8

私はそれが動作しない理由として正しいものと信じています。 xlimまたはylimを使用してxまたはyの制限を制限すると、プロッティングの前にデータがクリップされます。これでポリゴンのいくつかの頂点が省略されるので、プロットされないものもあります。

これはcoord_cartesianで、のxとyの制限を調整することができます。のデータは切り取られません。クリッピングしてプロットするのではなく、正しい領域に「ズーム」します。

ylimの代わりに、+ coord_cartesian(ylim = c(0,3))を試してください。

+0

これはpefectly、ありがとう!これは詳細ですが、私の2番目の質問に対する答えを知っていますか?なぜ、 'geom_map'関数で' color = white'を使うことができないのですか? – yellowcap

+0

@yellowcap 2番目のケースであなたの特定の問題が何であるかわからないことが主な理由です。 – joran

+0

@yellowcapおそらくこれは役に立たないかもしれませんが、 'geom_map'呼び出しでは' color = "white"を、 'aes'呼び出しでは' white 'を使います。それはあなたのデータに依存しないため、審美的ではありません。それは常に白です。 – Gregor