charts.html 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <title>ECharts</title>
  7. <link rel="stylesheet" href="css/jquery-labelauty.css">
  8. <style>
  9. ul {
  10. list-style-type: none;
  11. }
  12. li {
  13. display: inline-block;
  14. }
  15. li {
  16. margin: 10px 0;
  17. }
  18. input.labelauty + label {
  19. font: 10px "Microsoft Yahei";
  20. }
  21. </style>
  22. <script src="JS/echarts.js"></script>
  23. <script src="JS/jquery-3.4.1.js"></script>
  24. <script src="JS/jquery-labelauty.js"></script>
  25. </head>
  26. <body>
  27. <ul class="dowebok">
  28. <li><input type="radio" name="radio" value="pie" data-labelauty="pie"></li>
  29. <li><input type="radio" name="radio" value="radius" data-labelauty="radius"></li>
  30. <li><input type="radio" name="radio" value="bar" data-labelauty="bar"></li>
  31. <li><input type="radio" name="radio" value="line" data-labelauty="line"></li>
  32. <li><input type="radio" name="radio" value="stack" data-labelauty="stack"></li>
  33. </ul>
  34. <div id="main" style="width:100%;height:350px;"></div>
  35. <script type="text/javascript">
  36. var myChart;
  37. var json;
  38. var re=0;
  39. function showchart(str, ty) {
  40. if (ty == '') {
  41. ty = 'pie'
  42. }
  43. $("#main").height($(window).height() - 100);
  44. if(ty == 'triangle') {
  45. $("#main").width($(window).height());
  46. }
  47. myChart = echarts.init(document.getElementById('main'));
  48. json = JSON.parse(str);
  49. show(ty);
  50. $(':radio[value="' + ty+'"]').eq(0).attr("checked", true);
  51. }
  52. function show(type) {
  53. myChart.clear();
  54. if (type == 'pie') {
  55. setpie();
  56. }
  57. if (type == 'radius') {
  58. setradius();
  59. }
  60. if (type == 'bar') {
  61. setbar();
  62. }
  63. if (type == 'line') {
  64. setline();
  65. }
  66. if (type == 'stack') {
  67. setstack();
  68. }
  69. if (type == 'triangle') {
  70. re = 1;
  71. $(".dowebok").hide();
  72. settri();
  73. }
  74. setTimeout(function () {
  75. var img = new Image();
  76. img.src = myChart.getDataURL({
  77. type: "png", pixelRatio: 2, //biger2
  78. backgroundColor: '#fff'
  79. });
  80. img.onload = function () {
  81. var canvas = document.createElement("canvas");
  82. canvas.width = img.width;
  83. canvas.height = img.height;
  84. var ctx = canvas.getContext('2d');
  85. ctx.drawImage(img, 0, 0);
  86. var dataURL = canvas.toDataURL('image/png');
  87. jsObj.MessageText = dataURL;
  88. };
  89. }, 1000)
  90. }
  91. //pie
  92. function setpie() {
  93. var option = {
  94. title: {
  95. text: json.Title,
  96. //subtext: '',
  97. x: 'center',
  98. textStyle: {
  99. fontSize: 16
  100. }
  101. },
  102. tooltip: {
  103. trigger: 'item',
  104. formatter: "{a} <br/>{b} : {c} ({d}%)"
  105. },
  106. legend: {
  107. type: 'scroll',
  108. orient: 'vertical',
  109. right: 10,
  110. top: 20,
  111. bottom: 20,
  112. data: json.ListName,
  113. },
  114. series: [
  115. {
  116. name: json.YName,
  117. type: 'pie',
  118. radius: '85%',
  119. selectedMode: 'single',
  120. selectedOffset: 10,
  121. center: ['40%', '50%'],
  122. data: json.ListData,
  123. itemStyle: {
  124. emphasis: {
  125. shadowBlur: 20,
  126. shadowOffsetX: 0,
  127. shadowColor: 'rgba(40, 40, 40, 0.5)',
  128. },
  129. normal: {
  130. shadowBlur: 10,
  131. shadowColor: 'rgba(0,0,0,0.8)',
  132. shadowOffsetY: '10'
  133. }
  134. }
  135. }
  136. ]
  137. };
  138. myChart.setOption(option);
  139. }
  140. //radius
  141. function setradius() {
  142. var option = {
  143. title: {
  144. text: json.Title,
  145. //subtext: '',
  146. x: 'center',
  147. textStyle: {
  148. fontSize: 16
  149. }
  150. },
  151. tooltip: {
  152. trigger: 'item',
  153. formatter: "{a} <br/>{b} : {c} ({d}%)"
  154. },
  155. legend: {
  156. type: 'scroll',
  157. orient: 'vertical',
  158. right: 10,
  159. top: 20,
  160. bottom: 20,
  161. data: json.ListName,
  162. },
  163. series: [
  164. {
  165. name: json.YName,
  166. type: 'pie',
  167. radius: '85%',
  168. selectedMode: 'single',
  169. selectedOffset: 10,
  170. radius: ['45%', '85%'],
  171. center: ['40%', '50%'],
  172. data: json.ListData,
  173. itemStyle: {
  174. emphasis: {
  175. shadowBlur: 10,
  176. shadowOffsetX: 0,
  177. shadowColor: 'rgba(0, 0, 0, 0.5)'
  178. }
  179. }
  180. }
  181. ]
  182. };
  183. myChart.setOption(option);
  184. }
  185. var colorListr = [
  186. '#0f4471',
  187. '#00adb5',
  188. '#ff5722',
  189. '#5628b4',
  190. '#20BF55',
  191. '#f23557',
  192. '#118df0',
  193. '#11cbd7',
  194. '#d3327b',
  195. '#ae318a',
  196. '#993090',
  197. '#6f3071'
  198. ];
  199. //bar
  200. function setbar() {
  201. var ser = [];
  202. for (var i = 0; i < json.ListData.length; i++) {
  203. var data = [];
  204. for (var j = 0; j < json.ListData.length; j++) {
  205. if (i == j) {
  206. data.push(json.ListData[i]);
  207. }
  208. else {
  209. data.push(0);
  210. }
  211. }
  212. var item = {
  213. name: json.ListName[i],
  214. type: 'bar',
  215. barGap: '-100%',
  216. itemStyle: {
  217. normal: {
  218. shadowBlur: 20,
  219. shadowColor: 'rgba(40, 40, 40, 0.5)',
  220. }
  221. },
  222. data: data
  223. };
  224. ser.push(item);
  225. }
  226. var rotate = 0;
  227. for (var i = 0; i < json.ListName.length; i++) {
  228. if (json.ListName[i].length > 5) {
  229. rotate = 40;
  230. break;
  231. }
  232. }
  233. var option = {
  234. title: {
  235. text: json.Title,
  236. top: 5,
  237. left: 'center',
  238. textStyle: {
  239. fontSize: 16
  240. }
  241. },
  242. legend: {
  243. type: 'scroll',
  244. top: 45,
  245. right: '5%',
  246. data: json.ListName
  247. },
  248. tooltip: {
  249. },
  250. grid: {
  251. top: 95,
  252. left: '3%',
  253. right: '4%',
  254. bottom: '5%',
  255. containLabel: true
  256. },
  257. xAxis: [{
  258. type: 'category',
  259. axisTick: {
  260. show: false,
  261. color: '#707070'
  262. },
  263. axisLabel: {
  264. textStyle: {
  265. fontSize: 10,
  266. color: '#4D4D4D'
  267. },
  268. interval: 0,
  269. rotate: rotate
  270. },
  271. axisLine: {
  272. lineStyle: {
  273. color: '#707070'
  274. }
  275. },
  276. data: json.ListName,
  277. }],
  278. yAxis: {
  279. type: 'value',
  280. name: json.YName,
  281. nameTextStyle: {
  282. fontSize: 10,
  283. color: '#4D4D4D'
  284. },
  285. axisLabel: {
  286. textStyle: {
  287. fontSize: 10,
  288. color: '#4D4D4D'
  289. }
  290. },
  291. axisLine: {
  292. lineStyle: {
  293. color: '#707070'
  294. }
  295. }
  296. },
  297. series: ser
  298. };
  299. myChart.setOption(option);
  300. }
  301. //line
  302. function setline() {
  303. var option = {
  304. title: {
  305. text: json.Title,
  306. left: 'center',
  307. textStyle: {
  308. fontSize: 16
  309. }
  310. },
  311. tooltip: {
  312. trigger: 'axis',
  313. axisPointer: {
  314. type: 'shadow'
  315. }
  316. },
  317. grid: {
  318. left: '3%',
  319. right: '4%',
  320. bottom: '5%',
  321. containLabel: true
  322. },
  323. xAxis: [{
  324. type: 'category',
  325. axisTick: {
  326. show: false,
  327. color: '#707070'
  328. },
  329. axisLabel: {
  330. textStyle: {
  331. fontSize: 10,
  332. color: '#4D4D4D'
  333. },
  334. interval: 0,
  335. rotate: 40
  336. },
  337. axisLine: {
  338. lineStyle: {
  339. color: '#707070'
  340. }
  341. },
  342. data: json.ListName,
  343. }],
  344. yAxis: {
  345. type: 'value',
  346. name: json.YName,
  347. nameTextStyle: {
  348. fontSize: 10,
  349. color: '#4D4D4D'
  350. },
  351. axisLabel: {
  352. textStyle: {
  353. fontSize: 12,
  354. color: '#4D4D4D'
  355. }
  356. },
  357. axisLine: {
  358. lineStyle: {
  359. color: '#707070'
  360. }
  361. }
  362. },
  363. series: [{
  364. name: 'Grain',
  365. type: 'line',
  366. barWidth: '60%',
  367. itemStyle: {
  368. normal: {
  369. color: function (params) {
  370. var colorList = [
  371. '#7711AF', '#CF77FF', '#AE004F', '#F35872', '#FA7729',
  372. '#FFC526', '#F8E71C', '#34ADAE', '#3DDFD2', '#A0FFFF'
  373. ];
  374. var colorListr = [
  375. '#0f4471',
  376. '#00adb5',
  377. '#ff5722',
  378. '#5628b4',
  379. '#20BF55',
  380. '#f23557',
  381. '#118df0',
  382. '#11cbd7',
  383. '#d3327b',
  384. '#ae318a',
  385. '#993090',
  386. '#6f3071', '#7711AF', '#CF77FF', '#AE004F', '#F35872', '#FA7729',
  387. '#FFC526', '#F8E71C', '#34ADAE', '#3DDFD2', '#A0FFFF'
  388. ];
  389. return colorListr[params.dataIndex]
  390. },
  391. label: {
  392. show: true,
  393. position: 'top',
  394. formatter: '{c}'
  395. },
  396. shadowBlur: 20,
  397. shadowColor: 'rgba(40, 40, 40, 0.5)',
  398. }
  399. },
  400. data: json.ListData
  401. }]
  402. };
  403. myChart.setOption(option);
  404. }
  405. //stack
  406. function setstack() {
  407. var _max = 0;
  408. var ser = [];
  409. for (var i = 0; i < json.ListData.length; i++) {
  410. _max = _max + parseInt(json.ListData[i].value);
  411. }
  412. var fomatter_fn = function (v) {
  413. return (v.value / _max * 100).toFixed(0)
  414. }
  415. var _label = {
  416. normal: {
  417. show: false,
  418. position: 'inside',
  419. textStyle: {
  420. color: '#fff',
  421. fontSize: 16
  422. }
  423. }
  424. };
  425. for (var i = 0; i < json.ListData.length; i++) {
  426. var item = {
  427. type: 'bar',
  428. name: json.ListData[i].name,
  429. stack: '2',
  430. label: _label,
  431. legendHoverLink: false,
  432. barWidth: 100,
  433. data: [json.ListData[i].value]
  434. }
  435. ser.push(item);
  436. }
  437. var option = {
  438. title: {
  439. text: json.Title,
  440. //subtext: '',
  441. x: 'center',
  442. textStyle: {
  443. fontSize: 16
  444. }
  445. },
  446. tooltip: {
  447. show: true,
  448. backgroundColor: '#fff',
  449. borderColor: '#ddd',
  450. borderWidth: 1,
  451. textStyle: {
  452. color: '#3c3c3c',
  453. fontSize: 16
  454. },
  455. formatter: function (p) {
  456. console.log(p);
  457. var _arr = p.seriesName.split('/'),
  458. idx = p.seriesIndex;//1,2,3
  459. return 'name:' + p.seriesName + '<br>' + 'Number:' + p.value + '<br>' + 'Proportion:' + (p.value / _max * 100).toFixed(0) + '%';
  460. },
  461. extraCssText: 'box-shadow: 0 0 5px rgba(0, 0, 0, 0.1)'
  462. },
  463. legend: {
  464. type: 'scroll',
  465. right: 10,
  466. top: 20,
  467. bottom: 20,
  468. data: json.ListName,
  469. },
  470. xAxis: {
  471. splitNumber: 5,
  472. interval: _max / 5,
  473. max: _max,
  474. axisLabel: {
  475. show: false
  476. },
  477. axisLine: {
  478. show: false
  479. },
  480. axisTick: {
  481. show: false
  482. },
  483. splitLine: {
  484. show: false
  485. }
  486. },
  487. yAxis: [{
  488. data: ['Grain'],
  489. axisLabel: {
  490. fontSize: 16,
  491. color: '#000'
  492. },
  493. axisLine: {
  494. show: false
  495. },
  496. axisTick: {
  497. show: false
  498. },
  499. splitLine: {
  500. show: false
  501. }
  502. }, {
  503. show: false,
  504. data: ['Grain'],
  505. axisLine: {
  506. show: false
  507. }
  508. }],
  509. series: ser
  510. };
  511. myChart.setOption(option);
  512. }
  513. //triangle
  514. function settri() {
  515. var _lineStyle =
  516. {
  517. //symbolSize 设置小三角形顶点的⚪ 0是实线启示默认是4虚线
  518. symbol: 'emptyCircle', symbolSize: 0,
  519. lineStyle: {
  520. normal:
  521. { width: 1, color: '#888888',type: 'dashed' }
  522. },
  523. itemStyle: {
  524. normal:
  525. {
  526. borderWidth: 0,
  527. borderColor: '#000' }
  528. }
  529. };
  530. var list = [];
  531. var item = {
  532. name: 'TriangularEdge',
  533. type: 'line',
  534. itemStyle: { normal: { color: '#000000', barBorderRadius: 5 } },
  535. data: [[0, 0], [50, 50 * 1.732]],
  536. markPoint: {
  537. label: {
  538. normal:
  539. {
  540. color: '#000',
  541. textStyle: {
  542. color: '#000000',
  543. fontSize: 14,
  544. fontWeight:800
  545. },
  546. show: true,
  547. formatter: json.TopName
  548. }
  549. },
  550. symbol: 'roundRect',
  551. symbolSize: [0, 40],
  552. symbolOffset: [0, '-50%'],
  553. data: [{
  554. coord: [50, 50 * 1.732]
  555. }]
  556. }
  557. };
  558. var newObj1 = JSON.parse(JSON.stringify(item)); //'/'
  559. list.push(newObj1);
  560. var newObj2 = JSON.parse(JSON.stringify(item)); //'\'
  561. newObj2.data = [[50, 50 * 1.732], [100, 0]];
  562. newObj2.markPoint.label.normal.formatter = json.RightName;
  563. newObj2.markPoint.data = [{ coord: [100, 0] }];
  564. newObj2.markPoint.symbolOffset = ['30%', '50%'];
  565. list.push(newObj2);
  566. var newObj3 = JSON.parse(JSON.stringify(item));//'_'
  567. newObj3.data = [[0, 0], [100, 0]];
  568. newObj3.markPoint.label.normal.formatter = json.LeftName;
  569. newObj3.markPoint.data = [{ coord: [0, 0] }];
  570. newObj3.markPoint.symbolOffset = ['-30%', '50%'];
  571. list.push(newObj3);
  572. //'\'
  573. for (var i = 1; i < 10; i++) {
  574. for (var j = 0; j < 10; j++) {
  575. var x1 = 5 * i + 5 * j;
  576. var x2 = x1 + 5;
  577. var y1 = 5 * i * 1.732 - 5 * j * 1.732;
  578. var y2 = y1 - 5 * 1.732;
  579. if (y2 < -1) {
  580. break;
  581. }
  582. var line = {
  583. name: 'Dotted',
  584. type: 'line',
  585. itemStyle: {
  586. normal: {
  587. color: '#000066',
  588. barBorderRadius: 5,
  589. }
  590. }, symbol: _lineStyle.symbol,
  591. symbolSize: _lineStyle.symbolSize,
  592. lineStyle: _lineStyle.lineStyle,
  593. itemStyle: _lineStyle.itemStyle,
  594. data: [[x1, y1], [x2, y2]]
  595. };
  596. list.push(line);
  597. }
  598. }
  599. //'/'
  600. for (var i = 9; i > 0; i--) {
  601. for (var j = 0; j < 10; j++) {
  602. var x1 = 100 - (5 * (10 - i) + 5 * j);
  603. var x2 = x1 - 5;
  604. var y1 = 5 * (10 - i) * 1.732 - 5 * j * 1.732;
  605. var y2 = y1 - 5 * 1.732;
  606. if (y2 < -1) {
  607. break;
  608. }
  609. var line = {
  610. name: 'Dotted',
  611. type: 'line',
  612. itemStyle: {
  613. normal: {
  614. color: '#000066',
  615. barBorderRadius: 5,
  616. }
  617. }, symbol: _lineStyle.symbol,
  618. symbolSize: _lineStyle.symbolSize,
  619. lineStyle: _lineStyle.lineStyle,
  620. itemStyle: _lineStyle.itemStyle,
  621. data: [[x1, y1], [x2, y2]]
  622. };
  623. list.push(line);
  624. }
  625. }
  626. //'_'
  627. for (var i = 1; i < 10; i++) {
  628. for (var j = 0; j < 10; j++) {
  629. var x1 = 5 * i + 5 * j;
  630. var x2 = x1 + 10;
  631. var y1 = 5 * i * 1.732 - 5 * j * 1.732;
  632. var y2 = y1;
  633. if (y2 == 0) {
  634. break;
  635. }
  636. var line = {
  637. name: 'Dotted',
  638. type: 'line',
  639. itemStyle: {
  640. normal: {
  641. color: '#000066',
  642. barBorderRadius: 5,
  643. }
  644. }, symbol: _lineStyle.symbol,
  645. symbolSize: _lineStyle.symbolSize,
  646. lineStyle: _lineStyle.lineStyle,
  647. itemStyle: _lineStyle.itemStyle,
  648. data: [[x1, y1], [x2, y2]]
  649. };
  650. list.push(line);
  651. }
  652. }
  653. //三元相图颗粒颜色
  654. var colorListrT = [
  655. '#0f4471',
  656. '#FFD700',
  657. '#ff5722',
  658. '#5628b4',
  659. '#20BF55',
  660. '#f23557',
  661. '#118df0',
  662. '#FF00FF',
  663. '#d3327b',
  664. '#ae318a',
  665. '#993090',
  666. '#6f3071', '#7711AF', '#CF77FF', '#AE004F', '#F35872', '#FA7729',
  667. '#FFC526', '#F8E71C', '#34ADAE', '#3DDFD2', '#A0FFFF'
  668. ];
  669. for (var i = 0; i < json.ListPartSize.length; i++) {
  670. var d1 = {
  671. name: json.ListPartSize[i],
  672. type: 'scatter',
  673. symbolSize: i * 0.5 +4,
  674. // symbolSize: i * 2 + 6,
  675. itemStyle: {
  676. normal:
  677. {
  678. //三元图描边颜色0.8
  679. borderWidth: 0.8,
  680. borderColor: '#000',
  681. color: colorListrT[i]
  682. }
  683. },
  684. data: json.ListPoint[i]
  685. };
  686. list.push(d1);
  687. }
  688. var countL = 0;
  689. for (var i = 0; i < json.ListPoint.length; i++) {
  690. countL = countL + json.ListPoint[i].length;
  691. }
  692. option = {
  693. title: [{
  694. text: json.TopName + '-' + json.LeftName + '-' + json.RightName,
  695. //subtext: 'features:' + countL,
  696. left: 'center'
  697. }, {
  698. text: "features:"+ countL,
  699. right: '10%',
  700. top: '34.5%',
  701. textStyle: {
  702. color: '#000066',
  703. fontSize: 12
  704. }
  705. }],
  706. grid: {
  707. left: '-7%',
  708. right: '7%',
  709. bottom: '3%',
  710. containLabel: true
  711. },
  712. animation: false,
  713. legend: {
  714. type: 'scroll',
  715. data: json.ListPartSize,
  716. left: '30%',
  717. top: 50,
  718. },
  719. tooltip: {
  720. trigger: 'item',
  721. showDelay: 0,
  722. formatter: function (params) {
  723. return params.seriesName + ' :<br/>'
  724. + params.value[0] + ','
  725. + params.value[1];
  726. }
  727. },
  728. xAxis: [
  729. {
  730. show: false,
  731. }
  732. ],
  733. yAxis: [
  734. {
  735. show: false,
  736. min: 'dataMin'
  737. }
  738. ],
  739. dataZoom: [
  740. {
  741. type: 'slider',
  742. show: false,
  743. start: 0,
  744. end: 100,
  745. handleSize: 8
  746. },
  747. {
  748. type: 'inside',
  749. start: 0,
  750. end: 100
  751. },
  752. {
  753. type: 'inside',
  754. show: true,
  755. yAxisIndex: 0,
  756. filterMode: 'empty',
  757. width: 12,
  758. height: '100%',
  759. handleSize: 8,
  760. showDataShadow: true,
  761. left: '95%',
  762. start: 0,
  763. end: 100
  764. }
  765. ],
  766. series: list
  767. };
  768. myChart.setOption(option);
  769. }
  770. window.onresize = function () {
  771. $("#main").height($(window).height() - 30);
  772. if (re == 1) {
  773. $("#main").width($(window).height()-30);
  774. }
  775. myChart.resize();
  776. }
  777. $(function () {
  778. $(':input').labelauty().on('click', function () {
  779. var typ = $(':radio:checked').val();
  780. show(typ);
  781. });
  782. });
  783. </script>
  784. </body>
  785. </html>