绘制多点和最佳拟合线

时间:2016-01-13 14:07:33

标签: r

我想创建一个包含RoundrobinPrediction点的情节图,没有颜色,RoundrobinPrediction类型的点不同,它有一个传奇。我想为结果添加最合适的线条。

我无法将所有这些功能添加到一个有2个点的图表中。我习惯了Gnuplot,但我不知道如何用R做这个。我怎么用R做这个?

[1]输入数据

Inputdata,Roundrobin,Prediction
1,178,188
2,159,185
3,140,175

[2]生成数据的脚本

no_faults_data <- read.csv("testresults.csv", header=TRUE, sep=",")

# Graph 1
plot(no_faults_data$Inputdata, no_faults_data$Roundrobin,ylim = range(c(no_faults_data$Roundrobin,no_faults_data$Prediction)),xlab="Input data size (MB)", ylab="Makespan (seconds)")
points(no_faults_data$Inputdata, no_faults_data$Prediction)
abline(no_faults_data$Inputdata, no_faults_data$Roundrobin, untf = FALSE, \dots)
abline(no_faults_data$Inputdata, no_faults_data$Prediction, untf = FALSE, \dots)
legend("top", notitle, c("Round-robin","Prediction"), fill=terrain.colors(2), horiz=TRUE)

2 个答案:

答案 0 :(得分:1)

在基础R中,您必须首先创建一个拟合模型:

robin <- lm(Roundrobin ~ Inputdata, data = no_faults_data)
pred <- lm(Prediction ~ Inputdata, data = no_faults_data)

plot(no_faults_data$Inputdata, no_faults_data$Roundrobin,
     ylim = range(c(no_faults_data$Roundrobin,no_faults_data$Prediction)),
     xlab = "Input data size (MB)", ylab = "Makespan (seconds)",
     col = "green", pch = 19, cex = 1.5)
points(no_faults_data$Inputdata, no_faults_data$Prediction, pch = 22, cex = 1.5)
abline(robin, lty = 1)
abline(pred, lty = 5)
legend(1.1, 155, legend = c("Round-robin","Prediction"), pch = c(19,22), col = c("green","black"),
       bty = "n", cex = 1.2)

给出:

enter image description here

要进一步自定义基础R图,请参阅?par?legend

使用ggplot2,您需要将数据重新整形为长格式:

library(reshape2)
library(ggplot2)
ggplot(melt(no_faults_data, id="Inputdata"),
       aes(x=Inputdata, y=value, shape=variable, color=variable)) +
  geom_point(size=4) +
  geom_smooth(method = "lm", se = FALSE) +
  theme_minimal()

给出:

enter image description here

使用过的数据:

no_faults_data <- read.csv(text="Inputdata,Roundrobin,Prediction
1,178,188
2,159,185
3,140,175", header=TRUE)

答案 1 :(得分:0)

您应该查看ggplot2包以进行绘图。您提供的3点数据可能不需要,但它比默认值更好。

df <- data.frame("Inputdata" = c(1,2,3,1,2,3), "score" = c(178,159,140,188,185,175), "scoreType" = c(rep("Roundrobin",3), rep("Prediction",3)))

p <- ggplot(data=df, aes(x=Inputdata, y=score, group=scoreType, shape = scoreType)) + geom_point(size=5)
p <- p + ggtitle("My Title")
p+stat_smooth(method="lm",se = FALSE)

enter image description here

在这里,您可以按照分数类型进行分组,让GG图为您制作图例。 stat_smooth在这里使用lm。