我在R中有一个dataframe(tibble),我试图使用ggplot的dataframe的多个列来生成散点图和密度图。我尝试使用for循环来打印每一列的代码,但每次我都得到以下错误。
不知道如何为<tbl_df/tbl/data.frame>类型的对象自动选取比例。默认为连续。data[[var]][scale_index[[i]]]
中的错误:不能将列的子集设置在末尾之后。位置2、3、4、...、999和1000不存在。只有一列。
我尝试了下面的代码,但是每次我试图使用for循环将y值作为data[,i]传递时都会得到这个错误。
set.seed(1000)
data<- data_frame(x=1:1000, y1=rnorm(1000), y2=rnorm(1000), y3=rnorm(1000))
> data
# A tibble: 1,000 × 4
x y1 y2 y3
<int> <dbl> <dbl> <dbl>
1 1 -1.37 -2.33 1.79
2 2 0.163 0.853 -1.04
3 3 -0.113 -0.557 -0.292
4 4 0.860 -1.38 -1.79
5 5 0.129 -0.0861 0.514
6 6 0.193 -0.378 1.69
7 7 0.390 -0.610 -0.698
8 8 -2.23 -0.362 0.136
9 9 1.03 -0.299 0.728
10 10 1.20 -0.0263 -1.16
# ℹ 990 more rows
for (i in 2:ncol(data)){
print(ggplot(data, aes(x=x, y= data[ ,i]))+geom_point())
Sys.sleep(2)
}
有人知道怎么解决这个问题吗?为什么我会得到这个特定的错误?
2条答案
按热度按时间k97glaaz1#
一个字节的每一列本身就是一个字节。这不是
ggplot()
期望的x和y值:它需要aes()
中的列名。绘制数据的更好方法是将其转换为长格式,其中一列用于y变量名称,另一列用于其值。此外,您的示例代码将用最新的图覆盖每个图。您可能希望将每个图保存到一个文件中,或者考虑使用面来显示所有3个y变量。
就像这样:
结果:
2nbm6dog2#
渲染
ggplot()
时需要列的名称。您可以在
for
循环中使用列名。创建于2023-05-11带有reprex v2.0.2