获取错误:美学必须是长度1或与数据相同(951):当数据集大小相同时,R中的x,y

时间:2017-11-21 22:21:29

标签: r dataframe ggplot2

我正在运行该功能

ggplot(datfr, aes(x = dat1[1:951,], y = dat2[1:951,])) + 
geom_point()

并收到错误

Don't know how to automatically pick scale for object of type data.frame. 
Defaulting to continuous.
Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous.
Error: Aesthetics must be either length 1 or the same as the data (951): x, y

我认为只有当数据的x和y值大小不同时才会出现的最后一个错误,但是设置过滤器[1:951,]应该解决这个问题,当我在两个数据集上使用nrow时它会返回相同的错误行数。这里发生了什么事?

2 个答案:

答案 0 :(得分:1)

我假设您打算输入(951之后没有逗号):

ggplot(datfr, aes(x = dat1[1:951], y = dat2[1:951])) + 
geom_point()

否则,您会收到有关错误维数的错误。

使用编辑过的代码,我可以重现有关长度1或相同长度数据的错误。我不确定您为何会收到该错误,但此示例的解决方案是移动您进行子集化的位置,例如

ggplot(datfr[1:951,], aes(x = dat1, y = dat2)) + 
geom_point()

答案 1 :(得分:0)

我已经能够使用可重现的数据集重现上面的完整错误:

mpg_data <- as.data.frame(mpg)

ggplot(mpg_data, aes(x = mpg_data[1:10,], y = mpg_data[1:10,])) + 
  geom_point()

Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous.
Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous.
Error: Aesthetics must be either length 1 or the same as the data (234): x, y

看来你正在为ggplot的美学提供一个数据框。如上所述。 aes函数中的参数应引用data参数中提供的数据框中的列。

假设您在绘图之前尝试对数据集进行子集化,最好在构建ggplot之前或在函数的data参数内执行此操作:

ggplot(data = mpg_data[1:10,], aes(x = cty, y = cyl)) + 
  geom_point()
  

我建议阅读有关使用ggplot的内容。有很多在线资源非常有用,包括:http://ggplot2.tidyverse.org/reference/