chartsMore.html 27 KB

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