Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R &引用;美学必须是“长度”或“长度”;使用ggplot进行过滤时_R_Ggplot2 - Fatal编程技术网

R &引用;美学必须是“长度”或“长度”;使用ggplot进行过滤时

R &引用;美学必须是“长度”或“长度”;使用ggplot进行过滤时,r,ggplot2,R,Ggplot2,在ggplot2中绘图之前,我试图根据一些条件筛选数据 当我使用以下命令绘制整个数据集时,一切正常: x_in %>% ggplot(aes(x = x_in$`Turbine Wind Speed Adjusted m/s (m/s)`, y = x_in$`Turbine Power KW (kW)`)) + geom_point() 但是,当我在打印数据之前过滤数据时,出现了一个错误: x_in %>% dplyr::fi

ggplot2
中绘图之前,我试图根据一些条件筛选数据

当我使用以下命令绘制整个数据集时,一切正常:

x_in %>%
    ggplot(aes(x = x_in$`Turbine Wind Speed Adjusted m/s (m/s)`,
               y = x_in$`Turbine Power KW (kW)`)) +
    geom_point()
但是,当我在打印数据之前过滤数据时,出现了一个错误:

x_in %>%
    dplyr::filter(`Turbine Wind Speed Adjusted m/s (m/s)`,
                  `Turbine Power KW (kW)` < 1700) %>% 
    ggplot(aes(x = x_in$`Turbine Wind Speed Adjusted m/s (m/s)`,
               y = x_in$`Turbine Power KW (kW)`)) +
    geom_point()

Error: Aesthetics must be either length 1 or the same as the data (34812): x, y

使用
ggplot
的方法是将数据集传递到
data=
参数中,然后使用
aes
函数定义数据集中变量和绘图中变量之间的映射。例如,如果要绘制
cars
数据集,可以执行以下操作:

ggplot(cars, aes(x = speed, y = dist)) +
    geom_point()
由于您为
aes
提供了一个空白名称,ggplot知道
speed
指的是
cars
对象中的变量,本质上是
cars$speed
,而不是环境中的独立对象。但是,如果您愿意,您可以通过将对象传递给
aes
,来覆盖此操作:

cars2 <- cars * 2
ggplot(cars, aes(x = cars2$speed, y = dist)) +
    geom_point()
在您的示例中,取
x_In
,将其导入
filter
,然后将输出导入
ggplot
data=
参数。请注意,管道不会在
中编辑
x_的值,它只是将输出沿管道传递。因此
中保存的对象
x_不会更改。在您的示例中,过滤后的
x_版本在
中的唯一位置是进入
ggplot(data=

但是,当您设置
aes
时,您没有传递简单的名称(这将告诉
ggplot
在传递到
data=
的数据框中查找这些变量),而是指定了一个特定的对象:

aes(x = x_in$`Turbine Wind Speed Adjusted m/s (m/s)` ...
由于您在$
中指定了
x_,因此ggplot将在环境中的
x_in
对象中使用
`涡轮机风速…`
变量,该对象未经筛选,因此其行数与
ggplot
预期使用的数据不同


要解决这个问题,只需从
aes
中删除
x_in$
,这样ggplot就能正确使用您输入的数据。

您可以使用
dput(x_in)共享数据吗
?如果使用不带空格或特殊字符的列名,您的生活会更愉快。像您这样冗长复杂的列名既尴尬又困难。第二,在
aes()中指定美学时
,您永远不应该使用
$
,就像在
数据$column
中一样。
aes()
的要点是您只需键入列名:
aes(x=column)
。当然,一旦您修复了列名,这将更容易!;)Dput添加。另外@joran,不幸的是,我无法控制列名(除非我更改它们)。我讨厌它。但除去美元似乎是个问题。谢谢是的,我的观点是,在R中处理数据时,最好自己修改列名,如果必要的话,修改为更可行的名称。否则,你只是在寻求痛苦。相信我,你不会想继续使用那么长又复杂的列名。我觉得自己像个小丑,这就解决了它。非常感谢您的解释。@Nick很高兴我能帮忙!
cars %>%
    ggplot(aes(x = speed, y = dist)) +
    geom_point()
aes(x = x_in$`Turbine Wind Speed Adjusted m/s (m/s)` ...