How can I plot only points (not lines) with flot?
Asked Answered
C

2

5

Ultimately I'm after a very minimal 1 dimensional chart like this:

Simple Line Plot

Axes

  • X-axis: 0 to 100, and invisible
  • Y-axis: 0 to 0 (but -1 to 1 may be necessary to draw a three lines)

Data

  • Points only. No lines.
  • Two data sets need to be colored differently (red and green preferred).
  • All data on x-axis (y=0)
  • If shapes are possible, X's and O's would be perfect

Planes

  • Instead of a standard grid, I need three lines drawn at specific points on the x-axis.
    Example:

    [[40,-1],[40,1]],
    [[50,-1],[50,1]],
    [[60,-1],[60,1]]
    

Here's what I've tried so far:

d1 = [[48,0],[16,0],[10,0],[40,0],[30,0],[37,0]];
d2 = [[43,0],[60,0],[74,0],[83,0]];
var options = {
        points: { show: true, fill: true, radius: 5 },
        lines: { show: false, fill: true },
        xaxis: { show: false, min:0, max:100, ticks: false, tickColor: 'transparent' },
        yaxis: { show: false, min:-1, max:1, ticks: false, tickColor: 'transparent' },
        grid: { show:false }
    };
var data = [
        { data: d1, points: { color: '#E07571', fillcolor: '#E07571' } },
        { data: d2, points: { color: '#FDEDB2', fillcolor: '#FDEDB2' } }
    ];
$.plot($('#placeholder'), data, options);

Problems:

  • colors don't work
  • can't figure out how to draw planes
Cauda answered 24/10, 2013 at 4:6 Comment(0)
S
7

Here's a quick mock-up replicating your picture:

d1 = [[48,0],[16,0],[10,0],[40,0],[30,0],[37,0]];
d2 = [[43,0],[60,0],[74,0],[83,0]];
var options = {
    points: { show: true, radius: 10, lineWidth: 4, fill: false },
    lines: { show: false },
    xaxis: { show: false },
    yaxis: { show: false },
    grid: { show:true, 
            color: "transparent",
            markings: [ 
              { xaxis: { from: 40, to: 40 }, color:"black" },
              { xaxis: { from: 50, to: 50 }, color:"black" }, 
              { xaxis: { from: 60, to: 60 }, color:"black" }
            ]  
     }              
};

xCallBack = function (ctx, x, y, radius, shadow) {
   ctx.arc(x, y, radius, 0,  Math.PI * 2, false);
   var text = 'X'
   var metrics = ctx.measureText(text);
   ctx.font="15px Arial";
   ctx.fillStyle = "red";
   ctx.fillText(text,x-metrics.width/2,y+4);
}

checkCallBack = function (ctx, x, y, radius, shadow) {
   ctx.arc(x, y, radius, 0,  Math.PI * 2, false);
   var text = '✓'
   var metrics = ctx.measureText(text);
   ctx.font="15px Arial";
   ctx.fillStyle = "green";
   ctx.fillText(text,x-metrics.width/2,y+4);
}

var data = [
    { data: d1, color: 'red', points: {symbol: xCallBack } },
    { data: d2, color: 'green', points: {symbol: checkCallBack }}
];

$.plot($('#placeholder'), data, options);

Fiddle here.

enter image description here

Sigurd answered 24/10, 2013 at 13:49 Comment(0)
E
4

You're actually quite close already.

The color isn't working because color is a property of the series, not series.points. You just need to move it up a level, alongside data. The fillColor option isn't working because the 'c' needs to be capitalized.

For the vertical lines, use markings, as described under Customizing the Grid:

grid: {
    show: true,
    color: "transparent",
    markings: [
        { xaxis: { from: 20, to: 20 }, color: "#888", lineWidth: 5 }
    ]
}

To draw more complex point symbols, take a look at the Symbols Plugin. It allows you to define a custom callback to draw your own symbols.

Excurvate answered 24/10, 2013 at 13:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.