Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zingchart doesn't plot correctly a CSV with more than 10 columns

Scenario:

I need to plot data in Zingchart from a CSV that will have a fixed number of columns (37). This CSV has a header that will define the legend of the graph.

Problem:

If the number of elements I define in the header is less than 10 (including the X - Axis name) then everything is good. The first nine columns get a proper legend, and the others are named using the default Series XX. Link to the gist

In the data I've tried messing around with quotes " and ' but it didn't change the behavior.

Sample graph
Times|Line_1|Line_2|Line_3|Line_4|Line_5|Line_6|Line_7|Line_8|Line_9|"Line_10"   "Line_11"   Line_12   Line_13   Line_14   Line_15   Line_16   Line_17   Line_18   Line_19   Line_20   Line_21   Line_22   Line_23   Line_24   Line_25   Line_26   Line_27   Line_28   Line_29   Line_30   Line_31   Line_32   Line_33   Line_34   Line_35   Line_36
1218604835|0.0756521739130562|-0.151304347825771|||||||0.122608695652389|||||||-0.130434782608745|0.0443478260868915|0.232173913043425|||||||-0.172173913043707|||||||||||
1218604836|-0.427826086956543|-0.253043478260679|||||||-0.279130434782701|||||||-0.130434782608745|-0.0573913043477887|0.232173913043425|||||||-0.27391304347816|||||||||||
1218604837|-0.229565217391325|0.0469565217390482|||||||-0.0808695652174265|||||||0.0678260869565293|0.242608695652279|-0.169565217391664|||||||0.0260869565217945|||||||||||
1218604838|0.370434782608697|0.34695652173923|||||||-0.482608695652061|||||||0.0678260869565293|-0.159130434782583|-0.169565217391664|||||||0.224347826086841|||||||||||
1218604839|-0.133043478260902|-0.156521739130767|||||||0.117391304347848|||||||0.266086956522031|0.039130434782578|0.4304347826087|||||||-0.279130434782701|||||||||||

However, as soon as I continue including elements in the header using the CSV | separator, things start to go wrong. Ideally, the file should be as this one:

Sample graph
Times|Line_1|Line_2|Line_3|Line_4|Line_5|Line_6|Line_7|Line_8|Line_9|Line_10|Line_11|Line_12|Line_13|Line_14|Line_15|Line_16|Line_17|Line_18|Line_19|Line_20|Line_21|Line_22|Line_23|Line_24|Line_25|Line_26|Line_27|Line_28|Line_29|Line_30|Line_31|Line_32|Line_33|Line_34|Line_35|Line_36
1218604835|0.0756521739130562|-0.151304347825771|||||||0.122608695652389|||||||-0.130434782608745|0.0443478260868915|0.232173913043425|||||||-0.172173913043707|||||||||||
1218604836|-0.427826086956543|-0.253043478260679|||||||-0.279130434782701|||||||-0.130434782608745|-0.0573913043477887|0.232173913043425|||||||-0.27391304347816|||||||||||
1218604837|-0.229565217391325|0.0469565217390482|||||||-0.0808695652174265|||||||0.0678260869565293|0.242608695652279|-0.169565217391664|||||||0.0260869565217945|||||||||||
1218604838|0.370434782608697|0.34695652173923|||||||-0.482608695652061|||||||0.0678260869565293|-0.159130434782583|-0.169565217391664|||||||0.224347826086841|||||||||||
1218604839|-0.133043478260902|-0.156521739130767|||||||0.117391304347848|||||||0.266086956522031|0.039130434782578|0.4304347826087|||||||-0.279130434782701|||||||||||

But then the output is completely messed up. Link to the gist

The HTML code for the graph I'm running in local with the same results:

<!DOCTYPE html>
<html>

<head>
  <script src="zingchart_2.3.2/zingchart.min.js"></script>
  <script>
    zingchart.MODULESDIR = "zingchart_2.3.2/modules/";
  </script>
  <style></style>
</head>

<body>
  <div id='myChart'></div>
  <script>
    var myConfig = {
      "globals":{
          "font-family":"Arial"
      },
      "legend":{
          "layout":"4x",
          "adjust-layout":true,
          "align":"center",
          "background-color":"none",
          "shadow":0,
          "border-width":0,
          "vertical-align":"bottom"
      },
      "type": "line",
      "utc":true, 
      "csv": {
        "url": "zingchart_2.3.2/sample_5lines.dat",
        "separator": "|",
        "vertical-labels": true,
      },
      "plot":{
          "line-width":2,
          "active-area":true,
          "shadow":0,
          "exact":true,
          "marker":{
              "size":4
          },
          "hover-marker":{
              "size":3
          },
          "preview":true,
          "spline":false,
          "text":"%v",
      },
      "plotarea":{
          "adjust-layout":1,
          "width":"100%",
          "height":200,
          "position":"0% 0%",
          "margin-top":60,
          "margin-right":60,
          "margin-left":70,
          "margin-bottom":105
      },
      "preview":{
          "visible":true,
          "height":40,
          "position":"0 370",
          "margin-top":10,
          "margin-bottom":15
      },
      "scale-x":{
          "format":"%v",
          "zooming":true,
          "label":{
              "margin-top":100
          },
          "tick":{
              "line-color":"black",
              "line-width":"2px",
              "size":8,
          },
          "transform":{
            "type":"date",
            "all":"%d/%M/%Y\n%H:%i:%s",
          }
      },
      "scale-y":{
          "zooming":true,
          "decimals":0,   
      },
      "tooltip":{
        <!--"js-rule":"myfunc()",-->
        "shadow":0,
        "font-color":"#000",
        "text":"%t - %k<br><br>%v<br>Hz",
        "border-radius":"5px",
        "sticky":true,
        "timeout":500,
        "decimals":6
      }
    };

    zingchart.render({
      id: 'myChart',
      data: myConfig,
      height: 500,
      width: "100%"
    });
  </script>
</body>

</html>

Question:

What am I doing wrong?

like image 478
LaintalAy Avatar asked May 19 '16 16:05

LaintalAy


1 Answers

There are a couple issues with the JSON that I found.

1.In the CSV object, you would need to add horizontal-labels:true to set allow ZingChart to pull the appropriate labels from your dataset. In your case, the second row contains the labels for each series.

  1. The text "%v" is no longer necessary inside of the plot object. This essentially assigns a label to each series, but setting horizontal-labels:true fixes this.

  2. I have increased your decimals in the scale-y object to 2 instead of 0 so the scale-y does not appear to have duplicate values. You could also use exponent notation as shown here: http://www.zingchart.com/docs/design-and-styling/formatting-numbers/?q=customizable%20number%20formats

  3. I'm assuming the first column of values in your dat file are UNIX time stamps? These values are converted directly using the Javascript Date object, so `new Date(1218604835) would actually return a date of Wed Jan 14 1970. If they are indeed UNIX time stamps, the values would need to be multiplied by 1000 so that new Date(1218604835000) would return Tue Aug 12 2008.

Plnkr here: http://plnkr.co/edit/jQ0WuMsRBgEwV6s0fKlN?p=preview

Let me know if you need any further help! - ZingChart Member.

like image 87
mike-schultz Avatar answered Nov 14 '22 07:11

mike-schultz