Perfmon数据图。用ggplot缩放y轴

时间:2014-05-30 18:54:47

标签: r plot ggplot2 perfmon

我目前正在开发一个脚本,它将接收Windows Perfmon数据,并根据这些数据绘制图表,因为我发现PAL tool太慢了。

这是我的第一次通过,目前非常基本。

我正在努力缩放y轴。我目前正在变得像这样可怕的图: R Data Plot - Perfmon

如何适当缩放Y轴,以便在0和1之间存在合理的中断等(例如0.0000123,0.12,0.98,0.00000024)等?

我希望有一些动态的东西:

scale_y_continuous(breaks = c(min(d[,i]), 0, max(d[,i])))

Error in Summary.factor(c(1L, 105L, 181L, 125L, 699L, 55L, 270L, 226L,  : 
min not meaningful for factors

任何帮助表示感谢。

require(lattice)
require(ggplot2)
require(reshape2)

# Read in Perfmon -- MUST BE CSV
d <- read.table("~/R/RPerfmon.csv",header=TRUE,sep=",",dec=".",check.names=FALSE)
# Rename First Column to Time as this is standard in all Perfmon CSVs
colnames(d)[1]="Time"
# Convert Time Column into proper format
d$Time<-as.POSIXct(d$Time, format='%m/%d/%Y %H:%M:%S')
# Strip out The computer name from all Column Headers (Perfmon Counters)
# The regex matches a-zA-Z, underscores and dashes, may need to be expanded
colnames(d) <- sub("^\\\\\\\\[a-zA-Z_-]*\\\\", "", colnames(d))
colnames(d) <- sub("\\\\", "|", colnames(d))
colnames(d)
warnings()

pdf(paste("PerfmonPlot_",Sys.Date(),".pdf",sep=""))
for (i in 2:ncol(d)) {

  p <- qplot(d[,"Time"],y=d[,i], data=d, xlab="Time",ylab="", main=colnames(d[i]))
  p <- p + geom_hline()
  p <- p + scale_y_continuous(breaks = c(min(d[,i]), 0, max(d[,i])))
  print(p)

}
dev.off()

2 个答案:

答案 0 :(得分:1)

为了在0和1之间获得合理的中断,您可以使用:

scale_y_continuous(breaks=c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0))

重写的情节 - 代码的一部分:

ggplot(d, aes(x=Time, y=d[,i])) +
  geom_hline() +
  scale_y_continuous(breaks=c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0)) +
  labs(title=colnames(d[i]), x="Time",y="")

一种更有活力的设置休息方式:

scale_y_continuous(breaks=seq(from=round(min(d[,i]),1), to=round(max(d[,i]),1), by=0.1))

但是,当您查看错误消息时,您可以看到y变量是因子变量。所以你必须先用as.numeric转换它们。

答案 1 :(得分:0)

这是我在玩了一段时间之后最终得到的代码,以防有人想要做同样的事情:

使其成为动态的关键如下(注意as.numeric以避免任何错误)

 ynumeric <- as.numeric(d[,i])
 ymin <- min(ynumeric,na.rm = TRUE)
 ymax <- max(ynumeric,na.rm = TRUE)

 #generate sequence of 10
 ybreaks <- seq(ymin, ymax, length.out = 10)

 #Then passing this to the y_continuous function
 p <- p + scale_y_continuous(breaks=c(ybreaks))

我希望将来扩展到PALs复杂性区域,但使用R来提高效率。

require(lattice)
require(ggplot2)
require(reshape2)

# Read in Perfmon -- MUST BE CSV
d <- read.table("~/R/RPerfmon.csv",header=TRUE,sep=",",dec=".",check.names=FALSE,stringsAsFactors=FALSE)
# Rename First Column to Time as this is standard in all Perfmon CSVs
colnames(d)[1]="Time"
# Convert Time Column into proper format
d$Time<-as.POSIXct(d$Time, format='%m/%d/%Y %H:%M:%S')
# Strip out The computer name from all Column Headers (Perfmon Counters)
# The regex matches a-zA-Z, underscores and dashes, may need to be expanded
colnames(d) <- sub("^\\\\\\\\[a-zA-Z_-]*\\\\", "", colnames(d))
colnames(d) <- sub("\\\\", "|", colnames(d))
colnames(d)
warnings()

pdf(paste("PerfmonPlotData_",Sys.Date(),".pdf",sep=""))

for (i in 2:ncol(d)) {

  ynumeric <- as.numeric(d[,i])
  ymin <- min(ynumeric,na.rm = TRUE)
  ymax <- max(ynumeric,na.rm = TRUE)

  #generate sequence of 10
  ybreaks <- seq(ymin, ymax, length.out = 10)
  print(ybreaks)

  print(paste(ymin,ymax))

  p <- qplot(d[,"Time"],y=ynumeric, data=d, xlab="Time",ylab="", main=colnames(d[i]))
  p <- p + geom_smooth(size=3,se=TRUE) + theme_bw()
  p <- p + scale_y_continuous(breaks=c(ybreaks))
  print(p)

}
dev.off()