以下代码可以正常使用
dat1 <- data.frame(x=c(-1,-1,1,1),y=c(-1,1,-1,1),z=c(1,2,3,4))
dat2 <- data.frame(x=c(-0.5,0.5),y=c(-0.5,0.5))
ggplot(dat1, aes(x=x, y=y, z=z)) +
geom_tile(aes(fill=z)) +
scale_fill_gradient(limits = c(0, 1), low = "yellow", high = "red")
但是,这个
ggplot(dat1, aes(x=x, y=y, z=z)) +
geom_tile(aes(fill=z)) +
scale_fill_gradient(limits = c(0, 1), low = "yellow", high = "red") +
geom_point(data=dat2, aes(x=x,y=y))
给出错误
错误:美学必须是长度1或与数据(2)相同:x,y,z
有人可以解释一下原因吗?感谢。
答案 0 :(得分:1)
ggplot函数会将嵌套在其中的aes函数中声明的所有美学传递给跟随它的所有geom函数。为了说明我对以下两项工作的观点。
最干净的答案是从aes函数中删除z,因为它只需要第一个geom。
ggplot(dat1, aes(x=x, y=y) )+
geom_tile(aes(fill=z)) +
scale_fill_gradient(limits = c(0, 1), low = "yellow", high = "red") +
geom_point(data=dat2)
由于dat2中没有列z,您还可以在geom_point的aes函数中明确说明它
ggplot(dat1, aes(x=x, y=y, z=z) )+
geom_tile(aes(fill=z)) +
scale_fill_gradient(limits = c(0, 1), low = "yellow", high = "red") +
geom_point(data=dat2, aes( z=NULL))