使用ECharts可视化星座关系(2)


#Web 前端开发#


2014-01-02

星座学是有着悠久历史的,不过并不被现在的科学所认可。如果看重因果循环,或者迷恋黑客帝国,搞搞星座学还是其乐无穷的。调侃一下星座的字面意思也是常发生的事。哦,我目前不信星座什么的。

进入正题。

关于echarts的使用,之前已经大略地介绍了。详情请见:使用ECharts可视化星座关系(1)

先上个日期和星座的对应关系:

白羊座 3.21--4.19
金牛座 4.20--5.20
双子座 5.21--6.20
巨蟹座 6.21--7.22
狮子座 7.23--8.22
处女座 8.23--9.22
天秤座 9.23--10.22
天蝎座 10.23--11.21
射手座 11.22-12.21
摩羯座 12.22--1.20
水瓶座 1.21--2.19
双鱼座 2.20--3.20

从[2]中找到了一张星座配对表:

本文的目的是:为每一个“男”星座找出最匹配的4个“女”星座,并用力导向布局图展示出这些关系。下面是从配对表手工提取的部分数据(只用了6个“男”星座):

 男  |                       女             
双鱼 |  巨蟹(97) 天蝎(92) 双鱼(88) 处女(84)
水瓶 |  白羊(88) 双子(99) 天秤(97) 水瓶(87)
摩羯 |  金牛(93) 巨蟹(87) 处女(95) 摩羯(88)
射手 |  白羊(99) 双子(86) 狮子(92) 射手(89)
天蝎 |  巨蟹(92) 双鱼(99) 天蝎(87) 摩羯(85)
天秤 |  双子(93) 天秤(90) 水瓶(96) 射手(86)

“女”星座后面括号中的数字即为匹配表中的配对指数。

好了,数据准备好了,准备可视化,能想得到的要求如下: 1、“男”星座和“女”星座分别用不同的颜色表示,也就是分成了两类。 2、上表中匹配的“男”星座和“女”星座进行连线。为了区分匹配程度的不同,匹配系数作为连线的权重。

最终代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>星座</title>
    <script src="../build/echarts-plain-map.js"></script>

</head>
<body>

<div id="main" style="height:500px;width:600px;"></div>

<script>

    var myChart = echarts.init(document.getElementById('main'));
    var option = {
        title : {
            text: '星座关系',
            subtext: '',
            x:'right',
            y:'bottom'
        },
        tooltip : {
            trigger: 'item',
            formatter: '{a} : {b}'
        },
        legend: {
            x: 'left',
            data:['男','女']
        },
        series : [
            {
                type:'force',
                name : "人物关系",
                categories : [
                    {
                        name: '男',
                        itemStyle: {
                            normal: {
                                color : '#87cdfa'
                            }
                        }
                    },
                    {
                        name: '女',
                        itemStyle: {
                            normal: {
                                color : '#ff7f50'
                            }
                        }
                    }
                ],
                itemStyle: {
                    normal: {
                        label: {
                            show: true,
                            textStyle: {
                                color: '#800080'
                            }
                        },
                        nodeStyle : {
                            brushType : 'both',
                            strokeColor : 'rgba(255,215,0,0.4)',
                            lineWidth : 8
                        }
                    },
                    emphasis: {
                        label: {
                            show: false
                        },
                        nodeStyle : {
                            r: 30
                        },
                        linkStyle : {}
                    }
                },
                minRadius : 15,
                maxRadius : 25,
                density : 0.05,
                attractiveness: 1.2,
                nodes:[
                    {category:0, name: '双鱼座', value : 8},  //0
                    {category:0, name: '水瓶座',value : 8},  //1
                    {category:0, name: '摩羯座',value : 8},  //2
                    {category:0, name: '射手座',value : 8},  //3
                    {category:0, name: '天蝎座',value : 8},  //4
                    {category:0, name: '天秤座',value : 8},  //5

                    {category:1, name: '巨蟹座',value : 8},  //6
                    {category:1, name: '天蝎座',value : 8},  //7
                    {category:1, name: '双鱼座',value : 8},  //8
                    {category:1, name: '处女座',value : 8},  //9
                    {category:1, name: '白羊座',value : 8},  //10
                    {category:1, name: '双子座',value : 8},  //11
                    {category:1, name: '天秤座',value : 8},  //12
                    {category:1, name: '水瓶座',value : 8},  //13
                    {category:1, name: '金牛座',value : 8},  //14
                    {category:1, name: '摩羯座',value : 8},  //15
                    {category:1, name: '狮子座',value : 8},  //16
                    {category:1, name: '射手座',value : 8}   //17
                ],
                links : [
                    {source : 0, target : 6, weight : 97},
                    {source : 0, target : 7, weight : 92},
                    {source : 0, target : 8, weight : 88},
                    {source : 0, target : 9, weight : 84},
                        //
                    {source : 1, target : 10, weight : 88},
                    {source : 1, target : 11, weight : 99},
                    {source : 1, target : 12, weight : 97},
                    {source : 1, target : 13, weight : 87},
                        //
                    {source : 2, target : 14, weight : 93},
                    {source : 2, target : 6, weight : 87},
                    {source : 2, target : 9, weight : 95},
                    {source : 2, target : 15, weight : 88},
                        //
                    {source : 3, target : 10, weight : 99},
                    {source : 3, target : 11, weight : 86},
                    {source : 3, target : 16, weight : 92},
                    {source : 3, target : 17, weight : 89},
                        //
                    {source : 4, target : 6, weight : 92},
                    {source : 4, target : 8, weight : 99},
                    {source : 4, target : 7, weight : 87},
                    {source : 4, target : 15, weight : 85},
                        //
                    {source : 5, target : 11, weight : 93},
                    {source : 5, target : 12, weight : 90},
                    {source : 5, target : 13, weight : 96},
                    {source : 5, target : 17, weight : 86}
                ]
            }
        ]
    };

    myChart.setOption(option);

</script>

</body>
</html>

效果图:

数据可视化的目的是为了让观者更快地理解数据的某些方面。上图中,我们可以很快找到匹配系数较高的“男”“女”星座,连线越短,匹配系数越高。另外,额,水瓶座的同志,小心天秤座!

参考资料:

[1] http://hi.baidu.com/sinliu/item/81f5469b3a8632cbb72531a0

[2] http://www.zjgsdx.com/bbs/thread-22775-1-1.html

[3] 占星学:http://zh.wikipedia.org/wiki/%E5%8D%A0%E6%98%9F%E8%A1%93


( 本文完 )