Ternary Contour Plots in JavaScript

How to create D3.js-based ternary contour plots. Examples of Ternary Contour Plots with plotly.


Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Try Plotly Studio now.

var url = 'https://gist.githubusercontent.com/davenquinn/988167471993bc2ece29/raw/f38d9cb3dd86e315e237fde5d65e185c39c931c2/data.json';

var colors = ['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462','#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'];


d3.json(url, function(err, rawData) {
    if(err) throw err;

    plot(rawData);
});

function plot(rawData) {
    var data = Object.keys(rawData).map(function(k, i) {
        var pts = rawData[k];
        pts = pts.concat(pts[0]);

        return {
            type: 'scatterternary',
            mode: 'lines',
            name: k,
            a: pts.map(function(d) { return d.clay }),
            b: pts.map(function(d) { return d.sand }),
            c: pts.map(function(d) { return d.silt }),
            line: { color: '#444' },
            fill: 'toself',
            fillcolor: colors[i],
            hoveron:'fills+points'
        };
    });

    var layout = {
        ternary: {
            sum: 100,
            aaxis: makeAxis('Clay'),
            baxis: makeAxis('Sand'),
            caxis: makeAxis('Silt')
        },
        showlegend: false,
        width: 700,
        annotations: [{
            showarrow: false,
            text: 'Soil Types Fill Plot',
            x: 0.15,
            y: 1.1
        }]
    };

    Plotly.newPlot('myDiv', data, layout);
}

function makeAxis(title) {
  return {
      title: {
        text: title
      },
      ticksuffix: '%',
      min: 0.01,
      linewidth: 2,
      ticks: 'outside',
      ticklen: 8,
      showgrid: true,
  };
}
Inspired from Daven Quinn's block
</script>\n\t<script src="/?originalUrl=https%3A%2F%2Fcdnjs.cloudflare.com%2Fajax%2Flibs%2Fd3%2F3.5.17%2Fd3.min.js"></script>\n</head>\n\n<body>\n\t<div id='myDiv'><!-- Plotly chart will be drawn inside this DIV --></div>\n</body>","js":"var url = 'https://gist.githubusercontent.com/davenquinn/988167471993bc2ece29/raw/f38d9cb3dd86e315e237fde5d65e185c39c931c2/data.json';\n\nvar colors = ['#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3','#fdb462','#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'];\n\n\nd3.json(url, function(err, rawData) {\n if(err) throw err;\n\n plot(rawData);\n});\n\nfunction plot(rawData) {\n var data = Object.keys(rawData).map(function(k, i) {\n var pts = rawData[k];\n pts = pts.concat(pts[0]);\n\n return {\n type: 'scatterternary',\n mode: 'lines',\n name: k,\n a: pts.map(function(d) { return d.clay }),\n b: pts.map(function(d) { return d.sand }),\n c: pts.map(function(d) { return d.silt }),\n line: { color: '#444' },\n fill: 'toself',\n fillcolor: colors[i],\n hoveron:'fills+points'\n };\n });\n\n var layout = {\n ternary: {\n sum: 100,\n aaxis: makeAxis('Clay'),\n baxis: makeAxis('Sand'),\n caxis: makeAxis('Silt')\n },\n showlegend: false,\n width: 700,\n annotations: [{\n showarrow: false,\n text: 'Soil Types Fill Plot',\n x: 0.15,\n y: 1.1\n }]\n };\n\n Plotly.newPlot('myDiv', data, layout);\n}\n\nfunction makeAxis(title) {\n return {\n title: {\n text: title\n },\n ticksuffix: '%',\n min: 0.01,\n linewidth: 2,\n ticks: 'outside',\n ticklen: 8,\n showgrid: true,\n };\n}\n"}">