我想我可能偶然发现了Flot的限制,但我不确定。我试图代表一个单一的数据系列。项目的“状态”表示在Y轴上(其中有5个),时间在X轴上(项目可以随时间改变状态)。我希望图形具有连接每个数据系列的那些点的点和线。
除了跟踪项目的状态随着时间的推移,我还想在任何特定点代表它的“状态”。我想通过改变点的颜色来做。这意味着单个项目在不同时间可能具有不同的状态,这意味着对于单个数据系列,我需要一条连接不同颜色的不同点(点)的线。
到目前为止,我唯一看到的是能够为给定数据集中的所有点指定颜色。有谁知道是否有办法单独指定颜色?
感谢。
答案 0 :(得分:16)
你去交配。你需要使用画钩。
$(function () {
var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];
var colors = ["#cc4444", "#ff0000", "#0000ff", "#00ff00"];
var radius = [10, 20, 30, 40];
function raw(plot, ctx) {
var data = plot.getData();
var axes = plot.getAxes();
var offset = plot.getPlotOffset();
for (var i = 0; i < data.length; i++) {
var series = data[i];
for (var j = 0; j < series.data.length; j++) {
var color = colors[j];
var d = (series.data[j]);
var x = offset.left + axes.xaxis.p2c(d[0]);
var y = offset.top + axes.yaxis.p2c(d[1]);
var r = radius[j];
ctx.lineWidth = 2;
ctx.beginPath();
ctx.arc(x,y,r,0,Math.PI*2,true);
ctx.closePath();
ctx.fillStyle = color;
ctx.fill();
}
}
};
var plot = $.plot(
$("#placeholder"),
[{ data: d2, points: { show: true } }],
{ hooks: { draw : [raw] } }
);
});
答案 1 :(得分:11)
有3个观点,可能不值得回答我自己的问题,但这是解决方案:
我最初的问题是如何绘制点和线的数据集,但每个点都是我指定的颜色。
Flot仅允许在数据集级别指定点的颜色,这意味着每个颜色必须是其自己的数据集。考虑到这一点,解决方案是为每种颜色制作单个数据集,并仅使用点而不是线条绘制该数据集。然后我必须创建一个单独的数据集,这些数据集是我想要通过该行连接的所有点,并绘制一个没有点,只有一行的数据。
因此,如果我想显示一条经过五个不同颜色的5个点的线,我需要6个数据集:每个点5个,连接它们的线1个。 Flot会简单地将所有内容绘制在一起,我相信有一种方法可以指定显示在顶部的内容(以确保点显示在线上方)。
答案 2 :(得分:5)
实际上,将一个功能添加到flot并不是很困难,它会回调到代码中以获取每个点的颜色。我花了大约一个小时,而且无论如何我都不是javascript专家。
如果您查看drawSeriesPoints()
,您只需将回调参数传递给plotPoints()
,该参数将用于设置ctx.strokeStyle
。我添加了一个名为series.points.colorCallback
的选项,drawSeriesPoints()
使用了它,或者一个总是返回series.color的简单函数。
一个棘手的问题:您应该传递给回调的索引可能不是i
中的plotPoints()
,而是i/ps
。
希望这有帮助!