轮廓图ggplot2出错

时间:2016-11-17 14:01:10

标签: r ggplot2

以下代码可以正常使用

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

有人可以解释一下原因吗?感谢。

1 个答案:

答案 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))