我的问题在于无法将scale_color_gradient2
与geom_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")
任何方法都可以,只要我可以按以下顺序着色即可: 绿色-黄色-红色。
答案 0 :(得分:2)
你好如果我对问题的理解正确,首先,您可能必须确保“频率”列是数字
而不是因素或特征。然后,您应该改用scale_fill_gradient2
比scale_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创建