我正在使用ggplot2绘制数据系列-性能与线程数的关系,用于几种不同数量的循环迭代。我已经获得了数据点以显示我需要的位置,并且我已经使用geom_line()
来连接这些点。
我想获得连接这些点的平滑线,而不是锯齿线。不是拟合线/趋势线-只是外观漂亮的样条线,类似于创建平滑线形图时通过Excel或Google表格获得的样条线。
我敢肯定,做到这一点的最佳方法是将spline()
函数与geom_line()
结合使用,但是我对如何做到这一点感到困惑。在某个时候,我得到了一条样条曲线来显示整个图形,但是我似乎已经打破了这一点。在任何时候我都无法获得多条样条线来代替下图所示的多条锯齿线。
ggplot似乎是我要实现的目标的最短路径,但是我愿意接受不使用它的建议。
这是我现在在R脚本中得到的,创建了锯齿状的行:
#!/usr/bin/Rscript
# Read from stdin (pipe from runProj2 output) and write to txt before mod
data <- read.table('stdin', header=TRUE)
write.table(data, "data.txt", sep="\t", row.names=FALSE)
# Get rid of volume field to analyze performance vs. threads and nodes
data$Volume <- NULL
# Organize data by both threads and nodes & output for PDF incorporation
dataByThreads <- reshape(data, idvar = "Threads", timevar = "Nodes", direction = "wide")
dataByNodes <- reshape(data, idvar = "Nodes", timevar = "Threads", direction = "wide")
write.table(dataByThreads, "dataByThreads.txt", sep="\t", row.names=FALSE)
write.table(dataByNodes, "dataByNodes.txt", sep="\t", row.names=FALSE)
# Plot
library(ggplot2)
library(reshape2)
# Melt data back into long format for ggplot
threads_long <- melt(dataByThreads, id="Threads")
nodes_long <- melt(dataByNodes, id="Nodes")
ggplot(data=threads_long,
aes(x=Threads, y=value, color=variable)) +
geom_point() +
geom_line() +
labs(y='MegaHeights per Second', x='Threads', color='Nodes') +
ggtitle('Performance vs. Threads')
ggplot(data=nodes_long,
aes(x=Nodes, y=value, color=variable)) +
geom_point() +
geom_line() +
labs(y='MegaHeights per Second', x='Nodes', color='Threads') +
ggtitle('Performance vs. Threads')
这是到目前为止我得到的: