R 等高线图ggplot2出错

R 等高线图ggplot2出错,r,ggplot2,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 = "

下面的代码工作正常

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")
给出一个错误

错误:长度必须为1或与数据(2)相同:x、y、z


有人能解释一下原因吗?谢谢。

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列,您也可以在aes函数中为geom_point显式声明它

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

我实际上得到的错误是“eval(expr、envir、enclose)中的错误:找不到对象'z'。希望我的回答对你有所帮助。非常有效,谢谢。但是当我指定dat2是数据源时,为什么
geom_point()
函数期望z呢?这不应该覆盖从
ggplot()
传递的aes吗?这只是它的设计工作方式。我猜测的部分原因是,这意味着在90%的情况下,会有类似于我的第一个示例的更简单的代码。如果使用新的数据参数意味着您已经重新键入了所有的美学,即使其中一些是相同的,那么它只是生成了不必要的更大的脚本,这似乎与ggplot2的口号“图形语法”背道而驰。@JamesBarrett
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))