Integration with d3.js chart

Other charting libraries

by Flexmonster Pivot Table

HTML

<script src="https://cdn.flexmonster.com/flexmonster.js"></script>
<script src="//d3js.org/d3.v4.min.js"></script>

<div id="pivot-container"></div>

<svg id="d3Chart" width="700" height="400"></svg>

CSS

@import url(https://cdn.flexmonster.com/assets/jsfiddle-styles.css);

.axis--x path {
  display: none;
}

.axis--x line {
  display: none;
}

.axis--y path {
  display: none;
}

.axis--y line {
  stroke: #e7e7e7;
}

JavaScript

const pivot = new Flexmonster({
  container: "pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",
  licenseFilePath: "https://cdn.flexmonster.com/jsfiddle.charts.key",
  height: 350,
  toolbar: true,
  report: {
    dataSource: {
      dataSourceType: "csv",
      filename: "data/data.csv",
    },
    slice: {
      rows: [
        {
          uniqueName: "Country",
        },
      ],
      columns: [
        {
          uniqueName: "[Measures]",
        },
      ],
      measures: [
        {
          uniqueName: "Price",
        },
      ],
    },
  },
  reportcomplete: function () {
    pivot.off("reportcomplete")
    createChart()
  },
});

function createChart() {
  pivot.getData(
    {},
    drawChart,
    updateChart,
  );
}

function prepareDataFunction(rawData) {
  let data = [];
  for (let i = 0; i < rawData.data.length; i++) {
    let record = rawData.data[i];
    if (record["r0"] == undefined || record["v0"] == undefined) continue; //taking only facts for this sample
    let _record = {
      member: record["r0"],
      value: !isNaN(record["v0"]) ? record["v0"] : 0,
    };
    data.push(_record);
  }
  return data;
}

function drawChart(rawData) {
  const svg = d3.select("#d3Chart"),
    margin = { top: 40, right: 25, bottom: 120, left: 120 },
    width = +svg.attr("width") - margin.left - margin.right,
    height = +svg.attr("height") - margin.top - margin.bottom;

  const x = d3.scaleBand().range([0, width]).padding(0.4),
    y = d3.scaleLinear().range([height, 0]);

  const g = svg
    .append("g")
    .attr("transform", `translate(${margin.left},${margin.top})`);

  const data = prepareDataFunction(rawData);

  x.domain(data.map((d) => d.member));
  y.domain([0, d3.max(data, (d) => d.value) * 1.1]);

  g.append("g")
    .attr("class", "axis axis--x")
    .attr("transform", `translate(0,${height})`)
    .call(d3.axisBottom(x))
    .selectAll("text")
...