2017-09-14 5 views
1

バックグラウンド着色の特定の領域に3つのポリゴンを持つ散布図を描きたいと思います。それはthisのようになります。コードは、y軸上の4つの変数で正常に動作しますが、5番目を追加するとスローしてエラーになります。私はその理由を理解できません。ggplot:geom_polygon - Aesteticsの長さの誤差

エラー:

エラー:美学のいずれかの長さ1又はデータと同じでなければならない(5):X、Y

再生可能コード:

library(dplyr) 
library(ggplot2) 

v1 <- c(1, 1, 1) 
v2 <- c(1, 0, 0) 
v3 <- c(1, 0, 1) 
v4 <- c(0, 1, 1) 
v5 <- c(1, 0, 1) 

xG <- c(3, 3, 3, 3, 3) 

input <- c(v1, v2, v3, v4, v5) 
df <- data_frame(values = input, 
      module = c(rep("A", length(v1)), 
         rep("B", length(v2)), 
         rep("C", length(v3)), 
         rep("D", length(v4)), 
         rep("E", length(v5)))) 

perWorkField <- df %>% 
    group_by(module) %>% 
    summarise(sums = sum(values)) %>% 
    mutate(percent = round((sums/xG) * 100, 2)) 

ggplot(data = perWorkField) + 
    geom_point(mapping = aes(x = percent, y = module)) + xlim(c(0, 100)) + 
    geom_polygon(aes(x = c(0, 30, 30, 0), y = c(0.5, 0.5, 5.5, 5.5)), 
      fill="#F5817A", 
      color = NA) + 
    geom_polygon(aes(x = c(30, 75, 75, 30), y = c(0.5, 0.5, 5.5, 5.5)), 
      fill="#FFFF0044", 
      color = NA) + 
    geom_polygon(aes(x = c(75, 100, 100, 75), y = c(0.5, 0.5, 5.5, 5.5)), 
      fill="#00FF0044", 
      color = NA) + 
    geom_point(mapping = aes(x = percent, y = module), shape = 20, size = 5) + theme_classic() 

Iアドバイスをお願いします。前もって感謝します!

答えて

2

あなたは、私はそれを動作させるために、データの引数を交換し、それを動作させるために、これを試みることができるあなたは長方形の影付き領域を作成しているので、適切

ggplot() + 
    geom_point(data = perWorkField, mapping = aes(x = percent, y = module)) + xlim(c(0, 100)) + 
    geom_polygon(aes(x = c(0, 30, 30, 0), y = c(0.5, 0.5, 5.5, 5.5)), 
       fill="#F5817A", 
       color = NA) + 
    geom_polygon(aes(x = c(30, 75, 75, 30), y = c(0.5, 0.5, 5.5, 5.5)), 
       fill="#FFFF0044", 
       color = NA) + 
    geom_polygon(aes(x = c(75, 100, 100, 75), y = c(0.5, 0.5, 5.5, 5.5)), 
       fill="#00FF0044", 
       color = NA) + 
    geom_point(data = perWorkField, mapping = aes(x = percent, y = module), shape = 20, size = 5) + theme_classic() 
+0

私は少し混乱している、これは4と5つの変数に問題の原因となったではなく、なぜしかし、それ今すぐ働きます - ありがとう! – jeypeu

+1

あなたはポイントがあります。元のコードでは、 'ggplot(data = perWorkField)'にデータを宣言し、個々のgeomと衝突しました。私の視点からは、これは問題を引き起こしました。 –

1

geom_rect()はより保守/読みやすいかもしれgeom_polygon()。また

annotate()は、データフレームから継承された美学の問題を回避するために使用することができます。

ggplot(data = perWorkField) + 
    geom_point(aes(x = percent, y = module)) + 
    annotate("rect", xmin = 0, xmax = 30, ymin = 0.5, ymax = 5.5, fill = "#F5817A", color = NA) + 
    annotate("rect", xmin = 30, xmax = 75, ymin = 0.5, ymax = 5.5, fill = "#FFFF0044", color = NA) + 
    annotate("rect", xmin = 75, xmax = 100, ymin = 0.5, ymax = 5.5, fill = "#00FF0044", color = NA) + 
    geom_point(aes(x = percent, y = module), shape = 20, size = 5) + 
    theme_classic() 
+0

本当に良く見えます - ありがとう! – jeypeu