【发布时间】:2016-07-11 20:43:19
【问题描述】:
我有一堆数据框,我想在同一个 ggplot 上绘制每个数据框的 2 列。我已经有另一个函数的绘图,用蓝色和红色着色,我希望将新函数添加到其中。尽管我尝试的方式在控制台上有效,但我无法保存该函数,调用它并让它工作。我得到的错误是:
Discrete value supplied to continuous scale.
因此,数据帧在我的环境中,并命名为 BEFMORN1 到 BEFMORN9。初始图是 test_plot。
给我 test_plot 作品的第一部分。
test_plot<-ggplot()+geom_point(data=yy4, aes(x=Time, y=Dist), colour="red")+geom_point(data=zz4, aes(x=Time, y=Dist), colour="blue")
test_plot<-test_plot+scale_x_continuous(name="Time (Seconds from the beginning)")
test_plot<-test_plot+scale_y_continuous(name="Distance (Metres from the beginning)")
第二部分是新功能
plot_all_runs<-function(r,test_plot) {
for (i in 1:(length(r[[1]]))) {
z<-as.data.frame(mget(ls(pattern=paste0("BEFMORN",i))))
test_plot2<-test_plot+geom_point(data=z, aes_string(x=names(z)[12], y=names(z)[17]))
}print(test_plot2)
}
r 是 6 个不同数据帧列表的列表,因此 BEFMORN 来自 r[[1]]。 BEFNOON 将来自 r[[2]] 等。所以我的计划是在 paste0 中有 6 个具有不同参数的相同函数。
我正在使用aes_string(x=names(z)[12],因为数据框 z 在每次迭代中都有不同的列名。
有人明白我为什么会出错吗?我玩过这些比例(从最初的情节中删除它们或在下一个情节中再次添加它们)但没有任何改进。
编辑: 要绘制的所有列都已转换为数字。其他是因数和整数。
示例
BEFMORN1<-data.frame(BEFMORN1.Time=seq(0:10, 0.5), BEFMORN1.Dist=1:20)
BEFMORN2<-data.frame(BEFMORN2.Time=seq(0:13, 0.5), BEFMORN2.Dist=c(1:8,8,8,9,10,13,13,13,13.5,14,14,14 14:20))
yy4<-data.frame(Time=seq(0:10, 0.5). Dist=c(1:8,8,8,9,10,13,14:20))
ZZ4<-data.frame(Time=seq(0:12, 0.5). Dist=c(1:8,8,8,9,9.5,10,10.5,12,12.5,13,14:20))
test_plot<-ggplot()+geom_point(data=yy4, aes(x=Time, y=Dist), colour="red")+geom_point(data=zz4, aes(x=Time, y=Dist), colour="blue")
plot_all_runs<-function(test_plot) {
for (i in 1:9) {
z<-as.data.frame(mget(ls(pattern=paste0("BEFMORN",i))))
test_plot2<-test_plot+geom_point(data=z, aes_string(x=names(z)[12], y=names(z)[17]))
}print(test_plot2)
}
【问题讨论】:
-
错误的原因通常是因为数据是宽格式而不是长格式,并且 ggplot 将它们误解为离散变量。除此之外,如果没有可重现的示例 (stackoverflow.com/questions/5963269/…),很难提供帮助。您想将多条曲线添加到单个图还是打印出多个图?
-
多条曲线到一个图
-
在这种情况下,将数据帧合并为一个(不需要循环 - 有很多更好的选择),通过定义曲线的任何变量将数据转换为长格式和颜色。
-
感谢您的回答!不过,我需要为每个数据帧使用不同的曲线。想象一下 test_plot 已经绘制了它们的平均曲线,现在我还需要绘制初始曲线。如果我合并数据框,我将如何区分不同的数据框?
-
@Nikos 您区分数据集中的任何内容的方式相同:在另一列中使用变量。