Search code examples
javascriptamchartsamstock

Unable to add additional graph once graph has been created using makeChart()


I need to add one more graph in same panel after makeChart() has created the chart. If I can make one more function to add this additional graph it will solve the problem, but not able to find the solution. I have written a function to add this graph but not sure if this is the right way. Its not working.

var chart = AmCharts.makeChart("chartdiv", {
  "type": "stock",
  "color": "#fff",
  "dataDateFormat": "YYYY-MM-DD",
  "dataSets": [{
  "title": "MSFT",
    "fieldMappings": [{
      "fromField": "Open",
      "toField": "open"
    }, {
      "fromField": "High",
      "toField": "high"
    }, {
      "fromField": "Low",
      "toField": "low"
    }, {
      "fromField": "Close",
      "toField": "close"
    }, {
      "fromField": "Volume",
      "toField": "volume"
    }],
    "compared": false,
    "categoryField": "Date",

    /**
     * data loader for data set data
     */
    "dataLoader": {
      "url": "data/MSFT.csv",
      "format": "csv",
      "showCurtain": true,
      "showErrors": true,
      "async": true,
      "reverse": true,
      "delimiter": ",",
      "useColumnNames": true
   },

   /**
    * data loader for events data
    */
    "eventDataLoader": {
      "url": "data/MSFT_events.csv",
      "format": "csv",
      "showCurtain": true,
      "showErrors": true,
      "async": true,
      "reverse": true,
      "delimiter": ",",
      "useColumnNames": true,
      "postProcess": function ( data ) {
        for ( var x in data ) {
          switch( data[x].Type ) {
            case 'A':
              var color = "#85CDE6";
              break;
            default:
              var color = "#cccccc";
              break;
          }
          data[x].Description = data[x].Description.replace( "Upgrade", "<strong style=\"color: #0c0\">Upgrade</strong>" ).replace( "Downgrade", "<strong style=\"color: #c00\">Downgrade</strong>" );
          data[x] = {
            type: "pin",
            graph: "g1",
            backgroundColor: color,
            date: data[x].Date,
            text: data[x].Type,
            description: "<strong>" + data[x].Title + "</strong><br />" + data[x].Description
          };
        }
        return data;
      }
   }

  }, {
  "title": "TXN",
    "fieldMappings": [{
      "fromField": "Open",
      "toField": "open"
    }, {
      "fromField": "High",
      "toField": "high"
    }, {
      "fromField": "Low",
      "toField": "low"
    }, {
      "fromField": "Close",
      "toField": "close"
    }, {
      "fromField": "Volume",
      "toField": "volume"
    }],
  //  "compared": true,
    "categoryField": "Date",
    "dataLoader": {
      "url": "data/TXN.csv",
      "format": "csv",
      "showCurtain": true,
      "showErrors": true,
      "async": true,
      "reverse": true,
      "delimiter": ",",
      "useColumnNames": true
   }
  }],

  "panels": [{
      "title": "Value",
      "percentHeight": 70,

      "stockGraphs": [{
        "type": "candlestick",
        "id": "g1",
        "openField": "open",
        "closeField": "close",
        "highField": "high",
        "lowField": "low",
        "valueField": "close",
        "lineColor": "#fff",
        "fillColors": "#fff",
        "negativeLineColor": "#db4c3c",
        "negativeFillColors": "#db4c3c",
        "fillAlphas": 1,
        "comparedGraphLineThickness": 2,
        "columnWidth": 0.7,
        "useDataSetColors": false,
      //  "comparable": true,
        "compareField": "close",
        "showBalloon": false,
        "proCandlesticks": true
      }],

      "stockLegend": {
        "valueTextRegular": undefined,
        "periodValueTextComparing": "[[percents.value.close]]%"
      },
      "trendLines": [{
    "finalDate": "2014-01-20",
    "finalValue": 29,
    "initialDate": "2013-12-23",
    "initialValue": 37,
    "lineColor": "red",
    "lineAlpha" : 1
}, {
    "finalDate": "2012-01-22",
    "finalValue": 40,
    "initialDate": "2010-01-17",
    "initialValue": 16,
    "lineColor": "#CC0000",
    "lineAlpha" : 1
}],

addStockGraphnew : function(){

}

    }],



  "panelsSettings": {
    "color": "#fff",
    "plotAreaFillColors": "#333",
    "plotAreaFillAlphas": 1,
    "marginLeft": 60,
    "marginTop": 5,
    "marginBottom": 5
  },

  "chartScrollbarSettings": {
    "graph": "g1",
    "graphType": "line",
    "usePeriod": "WW",
    "backgroundColor": "#333",
    "graphFillColor": "#666",
    "graphFillAlpha": 0.5,
    "gridColor": "red",
    "gridAlpha": 1,
    "selectedBackgroundColor": "#444",
    "selectedGraphFillAlpha": 1
  },

  "categoryAxesSettings": {
    "equalSpacing": true,
    "gridColor": "#555",
    "gridAlpha": 1
  },

  "valueAxesSettings": {
    "gridColor": "#555",
    "gridAlpha": 1,
    "inside": false,
    "showLastLabel": true
  },

  "chartCursorSettings": {
    "pan": true,
    "valueLineEnabled": true,
    "valueLineBalloonEnabled": true
  },

  "legendSettings": {
    "color": "#fff"
  },

  "stockEventsSettings": {
    "showAt": "high",
    "type": "pin"
  },

  "balloon": {
    "textAlign": "left",
    "offsetY": 10
  },



  "periodSelector": {
    "position": "bottom",
    "periods": [{
      "period": "DD",
      "count": 10,
      "label": "10D"
    }, {
      "period": "MM",
      "count": 1,
      "label": "1M"
    }, {
      "{period}": "MM",
      "count": 6,
      "label": "6M"
    }, {
      "period": "YYYY",
      "count": 1,
      "label": "1Y"
    }, {
      "period": "YYYY",
      "count": 2,
      "selected": true,
      "label": "2Y"
    }, {
      "period": "YTD",
      "label": "YTD"
    }, {
      "period": "MAX",
      "label": "MAX"
    }]
  }
});

/////////////// my function to add new graph /////////////

     makeChart.prototype.addnewGraph = function(){
   var graph99 = new AmCharts.StockGraph();


       // graph99.title="ne";
        graph99.type = "line";
        graph99.valueField = "close";
        graph99.fillColors = "red";
        graph99.fillAlphas = .5;
        graph99.lineColor = "red";
        graph99.lineThickness = 1;

        graph99.negativeLineColor = "#db4c3c";
        graph99.negativeFillColors = "#db4c3c";
        graph99.useDataSetColors = false;

        (panelname:not sure).addStockGraph( graph99 );
      //  chart.panels = [(panelname :not sure)];
        var categoryAxesSettings = new AmCharts.CategoryAxesSettings();
        categoryAxesSettings.equalSpacing = true;
        chart.categoryAxesSettings = categoryAxesSettings;


}

Solution

  • You can use chart.panels array to access specific panel.

    There's also no need to create a new CategoryAxesSettings object. That code is redundant.

    Finally, you will need to call chart.validateNow() method after adding the new graph so that chart knows something changed.

    So, to rewrite your function:

    makeChart.prototype.addnewGraph = function() {
      var graph99 = new AmCharts.StockGraph();
    
      // graph99.title="ne";
      graph99.type = "line";
      graph99.valueField = "close";
      graph99.fillColors = "red";
      graph99.fillAlphas = .5;
      graph99.lineColor = "red";
      graph99.lineThickness = 1;
    
      graph99.negativeLineColor = "#db4c3c";
      graph99.negativeFillColors = "#db4c3c";
      graph99.useDataSetColors = false;
    
      // adding to first panel
      chart.panels[0].addStockGraph( graph99 );
    
      // taking in the changes
      chart.validateNow();
    
    }