使用 R plot 命令的大数据集不显示线标记 (pch)
Line markers (pch) are not shown for big datasets using R plot command
我能够绘制数据并且一切似乎都正常。唯一的问题是 R 似乎决定是否插入行标记。我有几个不同的数据集,对于 1500 的数据集,绘图工作正常,我可以看到标记。任何其他数据集,所有这些数据集都具有 3000+ 个点,绘图将忽略所有标记,只能看到线条。
你们可以在下面看到用于绘制数据和示例图的代码。
我的问题是,我如何确保 R 会绘制带有标记的线条?我做错了什么吗?
感谢您的宝贵时间和帮助。
png(filename="figures/all.normdtime.png", width=800, height=600)
plot(ecdf(data1[,10]), col="blue", ann=FALSE, pch=c(1,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
lines(ecdf(data2[,10]), col="green", pch=c(3,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
lines(ecdf(data3[,10]), col="red", pch=c(8,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
lines(ecdf(data4[,10]), col="orange", pch=c(2,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
title(xlab="Transfer rate (bytes/ms)")
title(main="ECDF Normalized Download Time")
dev.off()
我会尝试这样的事情:
data1 <- dnorm(seq(-5,5,.001))
x <- ecdf(data1)
plot(ecdf(data1), col="blue", ann=FALSE, pch=c(1,rep(NA,10000)), cex=2)
points(x=knots(x)[seq(1,length(knots(x)),5)], y=ecdf(data1)(knots(x)[seq(1,length(knots(x)),5)]), col="red",pch=3)
title(xlab="Transfer rate (bytes/ms)")
title(main="ECDF Normalized Download Time")
原始 ECDF 不可见,因为我们绘制了大约。 1500点。
如果你想要更少,只需将 points
的 x 和 y 参数中的值 5
更改为更大的数字,即 100。然后我们绘制了 ~70 个点:
我没有你的可用数据,但我认为这对你有用:
ecdf1 <- ecdf(data1[,10])
ecdf2 <- ecdf(data2[,10])
ecdf3 <- ecdf(data3[,10])
ecdf4 <- ecdf(data4[,10])
knots1 <- knots(ecdf1)
knots2 <- knots(ecdf2)
knots3 <- knots(ecdf3)
knots4 <- knots(ecdf4)
n <- 10 # every 10th point
png(filename="figures/all.normdtime.png", width=800, height=600)
plot(ecdf1, col="blue", ann=FALSE)
points(x=knots1[seq(1,length(knots1),n)], y=ecdf1(knots1[seq(1,length(knots1),n)]), col="blue",pch=1)
lines(ecdf2, col="green")
points(x=knots2[seq(1,length(knots2),n)], y=ecdf2(knots2[seq(1,length(knots2),n)]), col="green",pch=3)
lines(ecdf3, col="red",)
points(x=knots3[seq(1,length(knots3),n)], y=ecdf3(knots3[seq(1,length(knots3),n)]), col="red",pch=8)
lines(ecdf4, col="orange")
points(x=knots4[seq(1,length(knots4),n)], y=ecdf4(knots4[seq(1,length(knots4),n)]), col="orange",pch=2)
title(xlab="Transfer rate (bytes/ms)")
title(main="ECDF Normalized Download Time")
dev.off()
我能够绘制数据并且一切似乎都正常。唯一的问题是 R 似乎决定是否插入行标记。我有几个不同的数据集,对于 1500 的数据集,绘图工作正常,我可以看到标记。任何其他数据集,所有这些数据集都具有 3000+ 个点,绘图将忽略所有标记,只能看到线条。 你们可以在下面看到用于绘制数据和示例图的代码。
我的问题是,我如何确保 R 会绘制带有标记的线条?我做错了什么吗?
感谢您的宝贵时间和帮助。
png(filename="figures/all.normdtime.png", width=800, height=600)
plot(ecdf(data1[,10]), col="blue", ann=FALSE, pch=c(1,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
lines(ecdf(data2[,10]), col="green", pch=c(3,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
lines(ecdf(data3[,10]), col="red", pch=c(8,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
lines(ecdf(data4[,10]), col="orange", pch=c(2,NA,NA,NA,NA,NA,NA,NA,NA), cex=2)
title(xlab="Transfer rate (bytes/ms)")
title(main="ECDF Normalized Download Time")
dev.off()
我会尝试这样的事情:
data1 <- dnorm(seq(-5,5,.001))
x <- ecdf(data1)
plot(ecdf(data1), col="blue", ann=FALSE, pch=c(1,rep(NA,10000)), cex=2)
points(x=knots(x)[seq(1,length(knots(x)),5)], y=ecdf(data1)(knots(x)[seq(1,length(knots(x)),5)]), col="red",pch=3)
title(xlab="Transfer rate (bytes/ms)")
title(main="ECDF Normalized Download Time")
原始 ECDF 不可见,因为我们绘制了大约。 1500点。
如果你想要更少,只需将 points
的 x 和 y 参数中的值 5
更改为更大的数字,即 100。然后我们绘制了 ~70 个点:
我没有你的可用数据,但我认为这对你有用:
ecdf1 <- ecdf(data1[,10])
ecdf2 <- ecdf(data2[,10])
ecdf3 <- ecdf(data3[,10])
ecdf4 <- ecdf(data4[,10])
knots1 <- knots(ecdf1)
knots2 <- knots(ecdf2)
knots3 <- knots(ecdf3)
knots4 <- knots(ecdf4)
n <- 10 # every 10th point
png(filename="figures/all.normdtime.png", width=800, height=600)
plot(ecdf1, col="blue", ann=FALSE)
points(x=knots1[seq(1,length(knots1),n)], y=ecdf1(knots1[seq(1,length(knots1),n)]), col="blue",pch=1)
lines(ecdf2, col="green")
points(x=knots2[seq(1,length(knots2),n)], y=ecdf2(knots2[seq(1,length(knots2),n)]), col="green",pch=3)
lines(ecdf3, col="red",)
points(x=knots3[seq(1,length(knots3),n)], y=ecdf3(knots3[seq(1,length(knots3),n)]), col="red",pch=8)
lines(ecdf4, col="orange")
points(x=knots4[seq(1,length(knots4),n)], y=ecdf4(knots4[seq(1,length(knots4),n)]), col="orange",pch=2)
title(xlab="Transfer rate (bytes/ms)")
title(main="ECDF Normalized Download Time")
dev.off()