123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- <template>
- <div id="myScatter"></div>
- </template>
- <script>
- import scatterList from '@/static/scatter.json'
- export default {
- name: "hello",
- data() {
- return {
- originArr:[],
- dataArr:[]
- };
- },
- created() {
- this.originArr = scatterList;
- this.originArr.forEach(item => {
- let arr = [];
- arr.push(item.x);
- arr.push(item.y);
- arr.push(item.name);
- this.dataArr.push(arr);
- })
- //let list = scatterList.sort(function (a, b) { return Number(b.score) - Number(a.score) });
- scatterList.forEach((item,index) => {
- //item.rank = list.indexOf(item) + 1;
- //item.areaName = this.areaName(item.x, item.y);
- })
- //console.log(JSON.stringify(scatterList));
- },
- mounted() {
- this.drawLine();
- },
- methods: {
- randomNum(minNum,maxNum){
- switch(arguments.length){
- case 1:
- return parseInt(Math.random()*minNum+1,10);
- break;
- case 2:
- return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
- break;
- default:
- return 0;
- break;
- }
- },
- areaName(x, y) {
- if (x <= 0.5 && y <= 50) {
- return 'C';
- } else if (x <= 1 && x > 0.5 && y <= 50) {
- return 'C-'
- } else if (x <= 0.5 && y > 50 && y <= 75) {
- return 'B'
- } else if (x <= 1 && x > 0.5 && y > 50 && y <= 75) {
- return 'B-'
- } else if (x <= 0.5 && y > 75 && y <= 100) {
- return 'A'
- } else if(x <= 1 && x > 0.5 && y > 75 && y <= 100){
- return 'A-'
- }
- },
- random() {
- var r = Math.floor(Math.random() * 100 );
- return r;
- },
-
- randomDataArray() {
- var d = [];
- var len = 60;
- while (len--) {
- d.push([Number((Math.random() * 0.99).toFixed(3)), this.random(), "张三"]);
- }
- console.log(d);
- return d;
- },
- drawLine() {
- // 基于准备好的dom,初始化echarts实例
- let myScatter = this.$echarts.init(document.getElementById("myScatter"),'chalk');
- // 指定图表的配置项和数据
- var option = {
- tooltip: {
- trigger: "item",
- showDelay: 0,
- axisPointer: {
- show: true,
- lineStyle: {
- type: "dashed",
- width: 1
- }
- },
- textStyle: {
- height:'160px'
- },
- formatter: function (params) {
- const item = params;
- return `信息<br/>
- 姓名:${item.data[2]}
- <br/>通过率:${item.data[1]}%
- <br/>稳定度:${item.data[0]}
- `;
- }
- },
- legend: {
- data: ["学生"]
- },
- toolbox: {
- show: true,
- right:'70px',
- feature: {
- mark: { show: true },
- dataZoom: { show: true },
- restore: { show: true },
- saveAsImage: { show: true }
- }
- },
- //grid: {
- // show: true,
- // backgroundColor:"rgba(90,90,90,.2)"
- //},
- xAxis: [
- {
- type: "value",
- splitNumber: 2,
- name: "稳定度",
- nameTextStyle: {
- color:"#e4eadb"
- },
- scale: true,
- //max: 1,
- //min:0,
- splitLine:{
- show: true,
- lineStyle: {
- color:'#595959'
- }
- }
- }
- ],
- yAxis: [
- {
- type: "value",
- name: "通过率",
- nameTextStyle: {
- color:"#e4eadb"
- },
- max: 100,
- min: 0,
- splitLine:{
- show: false,
- lineStyle: {
- color:'#595959'
- }
- },
- interval:25,
- axisLabel: {
- show: true,
- formatter: function (value) {
- let val = [];
- if (value != 25) {
- val.push(value + '%')
- }
- return val;
- }
- },
- spiltArea: {
- show:true
- }
- }
- ],
- series: [
- {
- name: "学生",
- type: "scatter",
- data: this.dataArr,
- itemStyle: {
- color:"#79c8e8"
- },
- markLine: {
- silent: true,
- animation:false,
- data: [
- { yAxis: 75 }, { yAxis: 50 }, { yAxis: 100 }
- ],
- label: {
- color:"#e4eadb",
- formatter: '{c}%'
- },
- lineStyle: {
- color: "#595959",
- type:"solid"
- }
- },
- markArea: {
- silent:true,
- data: [
- [{
- xAxis: '0.5',
- yAxis: '100',
- itemStyle:{
- color:'rgba(90,90,90,.2)'
-
- },
- label: {
- show: true,
- position: ['90%', '10%'],
- color: '#66ff33',
- fontSize: 20,
- formatter: "A"
- }
-
- }, {
- xAxis: '0',
- yAxis: '75',
- itemStyle:{
- color:''
-
- }
-
- }],
- [{
- xAxis: '1',
- yAxis: '100',
- itemStyle:{
- color:'rgba(128,128,128,0)'
-
- },
- label: {
- show: true,
- position: ['5%', '10%'],
- color: '#66ff33',
- fontSize: 20,
- formatter: "A-"
- }
-
- }, {
- xAxis: '0.5',
- yAxis: '75',
- }],
- [{
- xAxis: '0.5',
- yAxis: '75',
- itemStyle:{
- color:'rgba(128,128,128,0)'
-
- },
- label: {
- show: true,
- position: ['90%', '10%'],
- color: '#66ff33',
- fontSize: 20,
- formatter: "B"
- }
-
- }, {
- xAxis: '0',
- yAxis: '50',
- }],
- [{
- xAxis: '1',
- yAxis: '75',
- itemStyle:{
- color:'rgba(90,90,90,.2)'
-
- },
- label: {
- show: true,
- position: ['5%', '10%'],
- color: '#66ff33',
- fontSize: 20,
- formatter: "B-"
- }
-
- }, {
- xAxis: '0.5',
- yAxis: '50',
- }],
- [{
- xAxis: '0.5',
- yAxis: '50',
- itemStyle:{
- color:'rgba(90,90,90,.2)'
-
- },
- label: {
- show: true,
- position: ['90%', '10%'],
- color: '#66ff33',
- fontSize: 20,
- formatter: "C"
- }
-
- }, {
- xAxis: '0',
- yAxis: '0',
- }],
- [{
- xAxis: '1',
- yAxis: '50',
- itemStyle:{
- color:'rgba(128,128,128,0)'
-
- },
- label: {
- show: true,
- position: ['5%', '10%'],
- color: '#66ff33',
- fontSize: 20,
- formatter: "C-"
- }
-
- }, {
- xAxis: '0.5',
- yAxis: '0',
- }]
- ],
- }
- }
- ]
- };
- // 绘制图表
- myScatter.setOption(option);
- window.addEventListener("resize", function () {
- myScatter.resize();
- });
- let that = this;
- myScatter.on('click', function (item) {
- that.$emit('handleItemClick', item);
- })
- }
- }
- };
- </script>
- <!-- Add "scoped" attribute to limit CSS to this component only -->
- <style scoped>
- #myScatter {
- width: 100%;
- height: 500px;
- margin: 0 auto;
- display: block;
- }
- </style>
|