ggplot在geom_point中给出“参数意味着不同的行数”错误,但这并不是真的 - 如何调试?

7

我有两个类型为大型SpatialPointsDataFrame的对象,命名为st2st10。它们来自同一来源。它们都可以通过以下方式轻松绘制:

plot(st2)

或者

plot(st10)

但我想要利用ggmap和ggplot绘制它们。对于st2,我可以使用简单的代码进行绘制:

map <- get_map(location = 'Poznań', zoom = 12)
ggmap(map) + geom_point(aes(x =st2@coords[,1], y = st2@coords[,2]))

但是当涉及到 st10 时,我会收到一个错误提示:
Error in data.frame(x = c(16.910848618, 16.910863876, 16.910913467, 16.910936356,  :   
arguments imply differing number of rows: 53885, 4

我用length()函数检查数值:

> length(st10@coords[,1])
[1] 53885
> length(st10@coords[,2])
[1] 53885

我使用summary()函数对它们进行检查

> summary(st10@coords[,1])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  16.84   16.88   16.91   16.91   16.91   16.99 
> summary(st10@coords[,2])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  52.35   52.41   52.46   52.44   52.46   52.46 

有什么问题吗?我有20多个SP数据框架,有些可以绘制,但其他的会出现上述错误...这与点数无关。

可能出了什么问题?或者有人能给我一些提示如何进行调试吗?


如果您查看?ggmap中的示例,您可能会注意到除了将美学映射到x = colname之外,没有任何其他语法将美学映射到其他内容。其中colname仅是变量名称。如果您想要从另一个数据源添加点,则可以执行类似于geom_point(data = ...,aes())的操作。 - joran
好的...我尝试像这样做:geom_point(data=data.frame(lat=st10@coords[,1], lon=lat=st10@coords[,2]), aes()),它作为一种解决方法起作用了。但我仍然想知道为什么在st2中不需要它?它们与ggmap有何不同?无论如何-谢谢! - mrz
你之前所做的只是因为运气好才能正常工作。aes() 对其参数进行了一些特殊的评估,如果不按照它的规则来操作,就会出现问题。aes() 的意图始终是要在你明确传递给该层的数据框中评估列名。永远不要在aes()内部使用@$[ - joran
3
所以这不是“变通办法”,而是“正确的做法”。 - joran
好的。那么这里的惯例是什么 - 我应该在下面添加答案还是删除问题? - mrz
1个回答

1

我通过创建一个新的数据框来解决了这个问题。

tlData=data.frame(x=c(0,100000),y=c(0,1000000)
ggplot(otherdf,aes(x=X,y=Y)+geom_point(alpha=0.1)+geom_line(data=tlData,aes(x=x,y=y),color='red')

似乎ggplot不再喜欢没有数据的geom组件,因为我之前使用的版本可以使用aes(x=c(0,100000),y=c(0,100000)。

1
虽然不喜欢必须这样做,但它确实有效,加一分。 - chao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接