时间序列图表替换rrdtool

时间:2014-01-10 08:21:35

标签: javascript time charts series

我有服务器数据(多个系列)以不同的时间间隔测量,从15秒到2小时可以追溯到几年。此数据位于sqlite数据库中。我一直在使用rrdtool将这些数据输入到他们的循环数据库格式中,然后从中生成时间图表(png文件),然后我将其显示在网页中。 rrdtool图表非常好,但我不想要维护两个数据库的麻烦,特别是当我们在工具更新期间更改数据库模式时。

目前最好的时间序列图表工具是什么(开源)。它可以是生成png文件的独立工具,也可以是javascript库。我只想传递时间戳和值,并得出图表,以及合理的缩放,轴标记(月,日,小时或组合,取决于规模)。还可以叠加和堆叠多个系列,添加图例和标签。

我简要介绍了gnuplot,google图表,chart.js和flot。 我的服务器后端是java,如果有帮助的话。

2 个答案:

答案 0 :(得分:2)

如果您要在服务器上生成PNG文件,那么JFreeChart是您的唯一选择 - 它可以很好地支持时间序列图表等。对于其他开源Java图表库,您可以查看item 13 of the FAQ中的列表。

答案 1 :(得分:0)

看看R。 它可以产生漂亮的图形。同时,它是一个非常轻量级的工具。

您可以非常轻松地创建可执行脚本。

这是一篇描述如何从'R`:

访问SQLite数据库的博客文章

实施例

这是一个只提供一些随机信号的工作示例:

enter image description here

产生上述图像的可执行脚本。

#!/usr/bin/Rscript --default-packages=stats,utils,graphics,grDevices,argparser

p <- arg.parser("Sample script that generates a time-series into PNG file.")
p <- add.argument(p, "output.png", help = "The PNG file will be stored here")
argv <- parse.args(p)

# generating some random data (3 x time-series)
t <- 1:1024  # our time-span is 1024 seconds
ts1 <- runif(length(t), min=-1, max=1)  # uniform noise

period <- 2 * pi / length(t)
sinefreq <- 10  # frequency of our sine wave
ts2 <- sin(t * period * sinefreq)  # the sine wave signal
ts3 <- ts1 + ts2  # noise + signal

# writing the PNG to file
png(argv$output.png, width = 600, height = 500, pointsize = 12, res = 90)
{
  # two plots, each in a single row
  par(mfrow = c(2, 1), mar = c(4, 4, 2, 2))

  plot(ts1, type = "l", col = "red", xaxs="i", ylim=c(-4,4),
       main="Noise", ylab="Amplitude")

  plot(ts3, type = "l", col = "gray", xaxs="i",
       main="Noise modulated on a sine wave", ylab="Amplitude")

  # plotting over the previous diagram
  lines(ts2, col="blue", lwd=5)
}

cat("Image written to", argv$output.png, "\n")