简体   繁体   English

ggplot:geom_polygon - Aestetics长度错误

[英]ggplot: geom_polygon - Error in length of Aestetics

I want to draw a scatterplot with three polygons in the background colouring specific areas. 我想绘制一个散射图,在背景中为三个多边形着色特定区域。 It should look like this . 它看起来应该是这样的 The code works fine with 4 variables on the y axis, but throws and error when I add a fifth. 代码在y轴上有4个变量可以正常工作,但是当我添加第五个变量时抛出并出错。 I can't figure out the reason. 我无法弄清楚原因。

The Error: 错误:

Error: Aesthetics must be either length 1 or the same as the data (5): x, y 错误:美学必须是长度1或与数据(5)相同:x,y

The reproducable code: 可重现的代码:

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 appreciate any advice. 我很感激任何建议。 Thanks in advance! 提前致谢!

You can try this to make it work, I replaced the data argument in order to make it work properly 您可以尝试使其工作,我替换了数据参数,以使其正常工作

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()

Since you're creating rectangular shaded regions, geom_rect() may be easier to read / maintain than geom_polygon() . 由于您正在创建矩形着色区域,因此geom_rect()可能比geom_polygon()更容易阅读/维护。

In addition, annotate() can be used to avoid the problem with inherited aesthetics from the data frame: 此外, 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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM