如何使geom_rect随R中的频率着色?

时间:2018-09-20 19:15:18

标签: r ggplot2

我的问题在于无法将scale_color_gradient2geom_rect一起使用。如何根据频率使不同矩形的颜色?我已经看过文档,其中说可以在geom_tile中使用颜色,但是对于geom_rect则不能使用任何颜色。我可以通过某种方式根据频率为geom_rect着色吗?

    d=data.frame(x1=c(1,3,1,5,4), x2=c(2,4,3,6,6), y1=c(1,1,4,1,3), y2=c(2,2,5,3,5), freq=c('23','2','12','55','84'), r=c(1,2,3,4,5))

ggplot() + 
      scale_x_continuous(name="x") + 
      scale_y_continuous(name="y") +
      geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=freq), color="black", alpha=0.5) +
      geom_text(data=d, aes(x=x1+(x2-x1)/2, y=y1+(y2-y1)/2, label=r), size=4) +
      scale_color_gradient2(low = "green", mid = "yellow", high = "red")

任何方法都可以,只要我可以按以下顺序着色即可: 绿色-黄色-红色。

1 个答案:

答案 0 :(得分:2)

你好如果我对问题的理解正确,首先,您可能必须确保“频率”列是数字 而不是因素或特征。然后,您应该改用scale_fill_gradient2scale_color_gradient2。最后,请确保调整midpoint参数 在通话中,否则它将默认为0。 做你想做的事:

library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 3.5.1

d=data.frame(x1=c(1,3,1,5,4), x2=c(2,4,3,6,6), y1=c(1,1,4,1,3), y2=c(2,2,5,3,5),
             freq=c('23','2','12','55','84'), r=c(1,2,3,4,5))

d$freq = as.numeric(as.character(d$freq))

ggplot() + 
  scale_x_continuous(name="x") + 
  scale_y_continuous(name="y") +
  geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=freq),
            color="black") +
  geom_text(data=d, aes(x=x1+(x2-x1)/2, y=y1+(y2-y1)/2, label=r), size=4) +
  scale_fill_gradient2(low = "green", mid = "yellow", high = "red",
                      midpoint = 45)

reprex package(v0.2.1)于2018-09-20创建