158Echarts - 平行坐标系(Scatter Matrix)

简介: 158Echarts - 平行坐标系(Scatter Matrix)
效果图

源代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
    <script src="js/echarts.min.js"></script>
    <script src="js/jquery-1.11.0.min.js"></script>
    <script src="dist/extension/dataTool.js"></script>
  </head>
  <body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 1024px;height:768px;"></div>
    <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById('main'));
      var option;
// Schema:
// date,AQIindex,PM2.5,PM10,CO,NO2,SO2
var schema = [
    {name: 'AQIindex', index: 1, text: 'AQI'},
    {name: 'PM25', index: 2, text: 'PM 2.5'},
    {name: 'PM10', index: 3, text: 'PM 10'},
    {name: 'CO', index: 4, text: 'CO'},
    {name: 'NO2', index: 5, text: 'NO₂'},
    {name: 'SO2', index: 6, text: 'SO₂'},
    {name: '等级', index: 7, text: '等级'}
];
var rawData = [
    [55,9,56,0.46,18,6,"良", "北京"],
    [25,11,21,0.65,34,9,"优", "北京"],
    [56,7,63,0.3,14,5,"良", "北京"],
    [33,7,29,0.33,16,6,"优", "北京"],
    [42,24,44,0.76,40,16,"优", "北京"],
    [82,58,90,1.77,68,33,"良", "北京"],
    [74,49,77,1.46,48,27,"良", "北京"],
    [78,55,80,1.29,59,29,"良", "北京"],
    [267,216,280,4.8,108,64,"重度", "北京"],
    [185,127,216,2.52,61,27,"中度", "北京"],
    [39,19,38,0.57,31,15,"优", "北京"],
    [41,11,40,0.43,21,7,"优", "北京"],
    [64,38,74,1.04,46,22,"良", "北京"],
    [108,79,120,1.7,75,41,"轻度", "北京"],
    [108,63,116,1.48,44,26,"轻度", "北京"],
    [33,6,29,0.34,13,5,"优", "北京"],
    [94,66,110,1.54,62,31,"良", "北京"],
    [186,142,192,3.88,93,79,"中度", "北京"],
    [57,31,54,0.96,32,14,"良", "北京"],
    [22,8,17,0.48,23,10,"优", "北京"],
    [39,15,36,0.61,29,13,"优", "北京"],
    [94,69,114,2.08,73,39,"良", "北京"],
    [99,73,110,2.43,76,48,"良", "北京"],
    [31,12,30,0.5,32,16,"优", "北京"],
    [42,27,43,1,53,22,"优", "北京"],
    [154,117,157,3.05,92,58,"中度", "北京"],
    [234,185,230,4.09,123,69,"重度", "北京"],
    [160,120,186,2.77,91,50,"中度", "北京"],
    [134,96,165,2.76,83,41,"轻度", "北京"],
    [52,24,60,1.03,50,21,"良", "北京"],
    [46,5,49,0.28,10,6,"优", "北京"],
    [26,37,27,1.163,27,13,"优", "广州"],
    [85,62,71,1.195,60,8,"良", "广州"],
    [78,38,74,1.363,37,7,"良", "广州"],
    [21,21,36,0.634,40,9,"优", "广州"],
    [41,42,46,0.915,81,13,"优", "广州"],
    [56,52,69,1.067,92,16,"良", "广州"],
    [64,30,28,0.924,51,2,"良", "广州"],
    [55,48,74,1.236,75,26,"良", "广州"],
    [76,85,113,1.237,114,27,"良", "广州"],
    [91,81,104,1.041,56,40,"良", "广州"],
    [84,39,60,0.964,25,11,"良", "广州"],
    [64,51,101,0.862,58,23,"良", "广州"],
    [70,69,120,1.198,65,36,"良", "广州"],
    [77,105,178,2.549,64,16,"良", "广州"],
    [109,68,87,0.996,74,29,"轻度", "广州"],
    [73,68,97,0.905,51,34,"良", "广州"],
    [54,27,47,0.592,53,12,"良", "广州"],
    [51,61,97,0.811,65,19,"良", "广州"],
    [91,71,121,1.374,43,18,"良", "广州"],
    [73,102,182,2.787,44,19,"良", "广州"],
    [73,50,76,0.717,31,20,"良", "广州"],
    [84,94,140,2.238,68,18,"良", "广州"],
    [93,77,104,1.165,53,7,"良", "广州"],
    [99,130,227,3.97,55,15,"良", "广州"],
    [146,84,139,1.094,40,17,"轻度", "广州"],
    [113,108,137,1.481,48,15,"轻度", "广州"],
    [81,48,62,1.619,26,3,"良", "广州"],
    [56,48,68,1.336,37,9,"良", "广州"],
    [82,92,174,3.29,0,13,"良", "广州"],
    [106,116,188,3.628,101,16,"轻度", "广州"],
    [118,50,0,1.383,76,11,"轻度", "广州"],
    [91,45,125,0.82,34,23,"良", "上海"],
    [65,27,78,0.86,45,29,"良", "上海"],
    [83,60,84,1.09,73,27,"良", "上海"],
    [109,81,121,1.28,68,51,"轻度", "上海"],
    [106,77,114,1.07,55,51,"轻度", "上海"],
    [109,81,121,1.28,68,51,"轻度", "上海"],
    [106,77,114,1.07,55,51,"轻度", "上海"],
    [89,65,78,0.86,51,26,"良", "上海"],
    [53,33,47,0.64,50,17,"良", "上海"],
    [80,55,80,1.01,75,24,"良", "上海"],
    [117,81,124,1.03,45,24,"轻度", "上海"],
    [99,71,142,1.1,62,42,"良", "上海"],
    [95,69,130,1.28,74,50,"良", "上海"],
    [116,87,131,1.47,84,40,"轻度", "上海"],
    [108,80,121,1.3,85,37,"轻度", "上海"],
    [134,83,167,1.16,57,43,"轻度", "上海"],
    [79,43,107,1.05,59,37,"良", "上海"],
    [71,46,89,0.86,64,25,"良", "上海"],
    [97,71,113,1.17,88,31,"良", "上海"],
    [84,57,91,0.85,55,31,"良", "上海"],
    [87,63,101,0.9,56,41,"良", "上海"],
    [104,77,119,1.09,73,48,"轻度", "上海"],
    [87,62,100,1,72,28,"良", "上海"],
    [168,128,172,1.49,97,56,"中度", "上海"],
    [65,45,51,0.74,39,17,"良", "上海"],
    [39,24,38,0.61,47,17,"优", "上海"],
    [39,24,39,0.59,50,19,"优", "上海"],
    [93,68,96,1.05,79,29,"良", "上海"],
    [188,143,197,1.66,99,51,"中度", "上海"],
    [174,131,174,1.55,108,50,"中度", "上海"],
    [187,143,201,1.39,89,53,"中度", "上海"]
];
var CATEGORY_DIM_COUNT = 6;
var GAP = 1;
var BASE_LEFT = 5;
var BASE_TOP = 10;
// var GRID_WIDTH = 220;
// var GRID_HEIGHT = 220;
var GRID_WIDTH = (100 - BASE_LEFT - GAP) / CATEGORY_DIM_COUNT - GAP;
var GRID_HEIGHT = (100 - BASE_TOP - GAP) / CATEGORY_DIM_COUNT - GAP;
var CATEGORY_DIM = 7;
var SYMBOL_SIZE = 3;
function retrieveScatterData(data, dimX, dimY) {
    var result = [];
    for (var i = 0; i < data.length; i++) {
        var item = [data[i][dimX], data[i][dimY]];
        item[CATEGORY_DIM] = data[i][CATEGORY_DIM];
        result.push(item);
    }
    return result;
}
function generateGrids(option) {
    var index = 0;
    for (var i = 0; i < CATEGORY_DIM_COUNT; i++) {
        for (var j = 0; j < CATEGORY_DIM_COUNT; j++) {
            if (CATEGORY_DIM_COUNT - i + j >= CATEGORY_DIM_COUNT) {
                continue;
            }
            option.grid.push({
                left: BASE_LEFT + i * (GRID_WIDTH + GAP) + '%',
                top: BASE_TOP + j * (GRID_HEIGHT + GAP) + '%',
                width: GRID_WIDTH + '%',
                height: GRID_HEIGHT + '%'
            });
            option.brush.xAxisIndex && option.brush.xAxisIndex.push(index);
            option.brush.yAxisIndex && option.brush.yAxisIndex.push(index);
            option.xAxis.push({
                splitNumber: 3,
                position: 'top',
                axisLine: {
                    show: j === 0,
                    onZero: false
                },
                axisTick: {
                    show: j === 0,
                    inside: true
                },
                axisLabel: {
                    show: j === 0
                },
                type: 'value',
                gridIndex: index,
                scale: true
            });
            option.yAxis.push({
                splitNumber: 3,
                position: 'right',
                axisLine: {
                    show: i === CATEGORY_DIM_COUNT - 1,
                    onZero: false
                },
                axisTick: {
                    show: i === CATEGORY_DIM_COUNT - 1,
                    inside: true
                },
                axisLabel: {
                    show: i === CATEGORY_DIM_COUNT - 1
                },
                type: 'value',
                gridIndex: index,
                scale: true
            });
            option.series.push({
                type: 'scatter',
                symbolSize: SYMBOL_SIZE,
                xAxisIndex: index,
                yAxisIndex: index,
                data: retrieveScatterData(rawData, i, j)
            });
            option.visualMap.seriesIndex.push(option.series.length - 1);
            index++;
        }
    }
}
var option = {
    animation: false,
    brush: {
        brushLink: 'all',
        xAxisIndex: [],
        yAxisIndex: [],
        inBrush: {
            opacity: 1
        }
    },
    visualMap: {
        type: 'piecewise',
        categories: ["北京", "上海", "广州"],
        dimension: CATEGORY_DIM,
        orient: 'horizontal',
        top: 0,
        left: 'center',
        inRange: {
            color: ['#c23531','#2f4554', '#61a0a8']
        },
        outOfRange: {
            color: '#ddd'
        },
        seriesIndex: [0]
    },
    tooltip: {
        trigger: 'item'
    },
    parallelAxis: [
        {dim: 0, name: schema[0].text},
        {dim: 1, name: schema[1].text},
        {dim: 2, name: schema[2].text},
        {dim: 3, name: schema[3].text},
        {dim: 4, name: schema[4].text},
        {dim: 5, name: schema[5].text},
        {dim: 6, name: schema[6].text,
            type: 'category', data: ['优', '良', '轻度', '中度', '重度', '严重']
        }
    ],
    parallel: {
        bottom: '5%',
        left: '5%',
        height: '31%',
        width: '55%',
        parallelAxisDefault: {
            type: 'value',
            name: 'AQI指数',
            nameLocation: 'end',
            nameGap: 20,
            splitNumber: 3,
            nameTextStyle: {
                fontSize: 14
            },
            axisLine: {
                lineStyle: {
                    color: '#555'
                }
            },
            axisTick: {
                lineStyle: {
                    color: '#555'
                }
            },
            splitLine: {
                show: false
            },
            axisLabel: {
                textStyle: {
                    color: '#555'
                }
            }
        }
    },
    grid: [],
    xAxis: [],
    yAxis: [],
    series: [
        {
            name: 'parallel',
            type: 'parallel',
            smooth: true,
            lineStyle: {
                normal: {
                    width: 1,
                    opacity: 0.3
                }
            },
            data: rawData
        }
    ]
};
generateGrids(option);
      myChart.setOption(option);
    </script>
  </body>
</html>
目录
相关文章
|
2月前
echarts中使用散点scatter更改颜色却不生效的问题
本文讨论了在ECharts中使用散点图(scatter)时更改颜色不生效的问题。原因是项目中使用了`visualMap`组件,它具有最高的优先级,导致自定义的颜色设置被覆盖。解决方法是在`visualMap`组件中增加`seriesIndex`属性,指定它只对特定的系列(series)生效,从而避免影响散点图的颜色设置。文章提供了详细的代码示例和解决办法。
62 2
195Echarts - 自定义系列(Error Scatter on Catesian)
195Echarts - 自定义系列(Error Scatter on Catesian)
22 0
154Echarts - 平行坐标系(Prices and Earnings 2012)
154Echarts - 平行坐标系(Prices and Earnings 2012)
40 0
244Echarts - 3D 散点图(3D Scatter with Scatter Matrix)
244Echarts - 3D 散点图(3D Scatter with Scatter Matrix)
56 0
242Echarts - 3D 散点图(3D Scatter with Dataset)
242Echarts - 3D 散点图(3D Scatter with Dataset)
140 0
211Echarts - 数据区域缩放(Error Scatter on Catesian)
211Echarts - 数据区域缩放(Error Scatter on Catesian)
34 0
157Echarts - 平行坐标系(Basic Parallel)
157Echarts - 平行坐标系(Basic Parallel)
38 0
156Echarts - 平行坐标系(Parallel Nutrients)
156Echarts - 平行坐标系(Parallel Nutrients)
42 0
155Echarts - 平行坐标系(Parallel Aqi)
155Echarts - 平行坐标系(Parallel Aqi)
90 0
90Echarts - 散点图(Scatter Matrix)
90Echarts - 散点图(Scatter Matrix)
39 0