我几天前提出了这个问题,但在评论中已经有所不同,我认为值得在一个新问题中提出评论中的许多要点。我为这个问题的长度道歉。我希望它不是非常不清楚。
我正在使用用于跟踪软件基准测试的R Sweave文件中的ggplot2创建图表。我正在专门研究基准测试的运行时间,并且要么使用我们有数据的最早测试运行的%偏差或分钟偏差。我说最早而不是第一个的原因是因为在软件的早期版本中,我们经常发生崩溃,这导致特定的测试运行没有特定文件的数据。
这是我正在尝试用以下代码构建图表的R代码:
library(ggplot2)
library(data.table) #package I'm using to create the benchmark data
dbhandle <- SQLConn_remote(DBName = "DATABASE", ServerName = "SERVER")
Testdf<-sqlQuery(dbhandle, 'select * from TABLENAME order by FileName, Number, Category', stringsAsFactors = FALSE)
versions<-unique(Testdf[order(Testdf$Number), ][,2])
#using data.table package
setDT(Testdf)
Testdf[, Benchmark := Value[which.min(Number)], by = "FileName"]
Testdf$Version<-factor(Testdf$Version, levels = versions)
Testdf$Deviation<-Testdf$Value- Testdf$Benchmark
Testdf$DeviationP<-(Testdf$Value- Testdf$Benchmark)/Testdf$Benchmark
g<-ggplot(subset(Testdf, Category == 'Time' & !is.na(Value) & Deviation <.5) , aes(color = Value, x = Version, y = Deviation, group = FileName)) +
geom_line(size=.25) + geom_point(aes(shape = Build), size = 1.5) +
scale_shape_manual(values=c(1,15)) + stat_summary(fun.y=sum, geom="line") +
ylab("Run Time Deviation from Benchmark (min)") +
scale_colour_gradient(name = 'Run Time (min)',low = 'blue', high = 'red') +
theme(axis.text.x = element_text(size = 10, angle = 90, vjust = .5)) + theme(axis.title.y = element_text(vjust = 1)) +
theme(axis.title.x = element_text(vjust = -0.1)) + theme(plot.margin=unit(c(0,0,0,0),"mm"))
g
(如果您想重新创建此内容,请参阅底部的示例数据框)
这是SQL表的示例:
这是使用实际SQL数据生成时图表的样子:
主要问题是每一行应从零开始。它不应该从第一个x轴刻度点开始,因为正如我上面所说,有时错误会导致程序在运行期间崩溃而不留下数据。因此,benchark应该从最早的可用运行计算,或者Number
对于该特定FileName
的最小值Category
。每行应代表特定Time
的{{1}} FileName
,图表为Value
与Version
。
令我头疼的是为什么这不起作用。我需要为特定Number
的最小FileName
条目选择基准,并为其Time
绘制图表。
以下是基准数据需要的内容(我正在使用代码块)。我需要为每个唯一Number
选择最小FileName
条目。完成后,我需要在Testdf上有一个名为Benchmark的新专栏,该专栏是时间Value
的{{1}},每个唯一Category
至少FileName
。< / p>
这是我为您创建的快速示例数据框,用于重新创建SQL表:
Number