如何在ggplot中直接绘制数据框前100行数据无需新建子数据框?
解决方案:无需新建数据框,直接在ggplot中绘制指定行数据
当然可以!完全不需要创建新的数据框就能实现这个需求,而且我还得提醒你:你当前的ggplot代码写法其实不符合语法规范,我会一起帮你修正过来。
方法1:直接在ggplot的data参数中切片
最直接的方式就是在ggplot调用的data参数里,直接选取数据框的前100行,这样整个绘图流程都会基于这部分数据,不需要额外存储新对象:
ggplot(newlevels[1:100, ], aes(x = dates)) + geom_line(aes(y = levels), colour = "red") + geom_line(aes(y = mean), colour = "green") + geom_line(aes(y = levelSMA), colour = "blue")
这里的newlevels[1:100, ]就是选取前100行所有列,ggplot会自动继承这个数据子集,所以后续的geom_line只需要在aes里映射对应的y轴变量即可,不需要再单独传递列值(你原来的geom_line(newlevels$levels, ...)写法是错误的,会破坏ggplot的映射逻辑)。
方法2:用tidyverse风格的切片(推荐)
如果你习惯使用tidyverse工具包,也可以用dplyr::slice函数在ggplot调用内完成筛选,代码更清晰:
library(dplyr) ggplot(newlevels %>% slice(1:100), aes(x = dates)) + geom_line(aes(y = levels), colour = "red") + geom_line(aes(y = mean), colour = "green") + geom_line(aes(y = levelSMA), colour = "blue")
管道符%>%会把newlevels传递给slice(1:100),直接筛选出前100行,同样不需要创建新的数据框。
内容的提问来源于stack exchange,提问作者Nikolay Yasinskiy
相关产品推荐
相关产品推荐

