chartsMore.html 26 KB

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