chart-pollutionSource.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <!-- **************************************NO.2 人口*************************************** -->
  2. <template>
  3. <div class="chart-container">
  4. <div id="population" style="width: 100%; height:21vh;">
  5. </div>
  6. </div>
  7. </template>
  8. <script>
  9. import * as echarts from 'echarts';
  10. import {getWryfbtj} from '@/api/bigdata'
  11. export default {
  12. name: 'population',
  13. data() {
  14. return {
  15. count: 0,
  16. data_wryfbtj:[]
  17. }
  18. },
  19. mounted() {
  20. this.wryfbtj();
  21. },
  22. methods: {
  23. // 出处 http://192.144.199.210:8080/editor/index.html?chart_id=__n0_3jDX4e4bko6
  24. wryfbtj() {
  25. let that = this
  26. getWryfbtj().then(resp => {
  27. that.data_wryfbtj = resp.data
  28. that.myEcharts()
  29. })
  30. },
  31. myEcharts() {
  32. let that = this
  33. var chartDom = document.getElementById('population');
  34. var myChart = echarts.init(chartDom);
  35. var color = ['#02CDFF', '#62FBE7', '#7930FF', '#eb9123', '#ecb935']
  36. var option;
  37. var bgImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAF+CAYAAADNzDlVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAilJREFUeNrs1rENwjAURdEfC0pmQAwBDfuwE8wDDSULIGagTGEcFNHQpfPXseT0V0ryzrA/XzcRsWt3HX2fsd1XSRITc8O2JIn5RZVIdsr87mU54xT0TBL1/Sms2uPd7qPXivvp+PfKpfuGBAkStPxMf7muLXe43FiO5ViO5VjOsAoSxHIsx3Isx3Isx3KGVZAglmM5lmM5lmM5liMFQYJYjuVYjuVYjuVYTpAgQSzHcizHcizHcoZVkCCWYzmWYzmWYzmWM6yCBLEcy7Ecy7Ecy7GcIEGCWI7lWI7lWI7lDKsgQYJYjuVYjuVYjuUMqyBBLMdyLMdyLMdyLGdYBQliOZZjOZZjOZZjOUGCBLEcy7Ecy7EcyxlWQYJYjuVYjuVYjuVYzrAKEsRyLMdyLMdyLMdypCBIEMuxHMuxHMuxnGEVJEgQy7Ecy7Ecy7GcYRUkiOVYjuVYjuVYjuUMqyBBLMdyLMdyLMdyLCdIkCCWYzmWYzmWYznDKkgQy7Ecy7Ecy7EcyxlWQYJYjuVYjuVYjuVYjhQECWI5lmM5lmM5ljOsggQJYjmWYzmWYzmWM6yCBLEcy7Ecy7Ecy7GcYRUkiOVYjuVYjuVYjuUECRLEcizHcizHcixnWAUJYjmWYzmWYzmWYznDKkgQy7Ecy7Ecy7Ecy5GCIEEsx3Isx3Isx3IsJ0iQIJZjOZZjOZZjOcMqSBDLsRzLsRzL9Wy5odZqhwQJWn4+AgwApGqd0LftHcgAAAAASUVORK5CYII=';
  38. var fillImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAF+CAYAAADNzDlVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABFhJREFUeNrs3U+O1DgUgHHblUFzhb7GCCHNtnfMFUasOA9HYEWfAQlpZq6AEOIIdPcFZgMVe5L6Q6pLzQjFLZK2fpZSKbVioQ8n9b68+Dnxz39fXYYYrkIIF+Fxt5the5kagQkHhtepEZhvUCk01tLh3Gul3aZQwovxSwMwn8cfhW74+Lul66jJawgQIEB1QJfDdj1s5ZFvI8NzLsfluByX43KAlmzjKRdyTkYIEJeb6XK5JC7H5bhchculmLmcOASoAqjPGyMEiMtVuFyMhctxOS5X4XKlRC4nDgECBIjLLeVyXSnpqhQux+W43FyXi/Jy4hCgKqC+74wQIC5XkZdLKcvLcTkuV+FyOScuJw4Bmt/MlwPE5WprH4LaBy7H5WpcbvjgcuIQIECAuByXe0iXy4eJtOONXilx2NJh238PIYbpmPP9qvpc7O5YU+r351/KB9hyAl7C3WPO9+vqs3O5hkZocrn9H+PJwdP3Y87h/n9sNX24HKBFgLaesQLiclUul9Q+yMvJy1Xl5bLaB3EIUE3biVzvGSsgLjfb5Yb7ci7H5bhchcvFWLicOAQIECAux+W43P1QXcmpuWuotbyc2gdxCFBF29c+FHk5QFzOfDl5OS63jMsFtQ/iECBAgLgcl+Ny34PqcoMrot+cFkzEWIbtuN9/H0/R/yuyWFGf2zR8vBiLIHa5hTsFE3FGkcWifT4Pey63fqDt9hemsOYWSylGaM2t++P6zWUjS7KNuZGX1pdbO5S83Mqb9eXEIUC1gfV4r2GEAP08IHk5LsfluNzkcsEzVnEIULXLFS4HiMvNdrnh+uFyXI7LVbhcTN7hJQ4BqnU5eTlAXG6+y/XbjstxOS5X4XJ93nA5cQhQrcupYwXE5Wa7XLRWMJfjclUuV6wVLA4BAgSIyy3ncl0p6aoULsfluNxcl4vRM1ZxCBAgQFxuybWC25ov1+Wc2nK543tOj/tpeYxpOz9mzX3GERpd7uI4PWZcGuO8Hf82vSr07n5FfW7TZrPlcuIQoAqgL19+NUKAuFyFyw1xyDPWVbtci9dQY/Pl+o7LiUOA5rdD7cPGCAHicubLcTkut4jLmS8nDgF6CJdT+wCIy3kfK5fjcsu43HA/xOXEIUCVLnffhAYjBIjL/ZjLZevLcTkuV+Vyyfpy4hCgKqCvX58YIUBcbr7Lxd8/vb1u6Gf7hstxuZ/tcp6xikOAAAHicubLPYz2BHk5LsfluJzA+tja7hlrr/YBEJeb63Lx2cd38nJcjstVuFyyvpw4BAgQIC7H5bgcl3u0Lpd77/AShwBVNGuSAOJylS739MNf7blcSv1+uFI+LFmbT5avzbv/gOmY8/2q+lzc+ZWbqvZPK76OS9duvrNfV5/2XG4YMS4nDgECBIjLcbmHdLmGzjh5OS7H5cShxoGsLweIy1W63G/v/+FyXI7LVbic+XLiECBAgLgcl+NyXI7LrcXlYilFHAIEaH77T4ABAKzsRPWz+TQ7AAAAAElFTkSuQmCCgg';
  39. var chartData =that.data_wryfbtj
  40. var bgData = [];
  41. var itemData = [];
  42. // 取出每一条数据value,作为显示数据
  43. chartData.forEach(function (items, index) {
  44. itemData.push(items.value);
  45. })
  46. // 取出所有数据最大值,作为背景象形柱图数据
  47. chartData.forEach(function (items, index) {
  48. bgData.push({
  49. name: items.name,
  50. value: Math.max.apply(null, itemData)
  51. });
  52. })
  53. // 所有数据最大值
  54. var maxValue = Math.max.apply(null, itemData);
  55. // 字体 distance放大参数
  56. var scale = 1;
  57. //富文本配置
  58. var rich = {
  59. white: {
  60. color: "#fff",
  61. align: 'left',
  62. fontSize: 12 * scale,
  63. padding: [0, 0]
  64. },
  65. };
  66. option = {
  67. tooltip: {
  68. formatter: '{b} : {c}' + '处',
  69. },
  70. grid: {
  71. left: '3%',
  72. right: '6%',
  73. bottom: '3%',
  74. containLabel: true
  75. },
  76. xAxis: [{
  77. type: 'category',
  78. data: (function (data) {
  79. var arr = [];
  80. data.forEach(function (items) {
  81. arr.push(items.name);
  82. });
  83. return arr;
  84. })(chartData),
  85. boundaryGap: ['20%', '20%'],
  86. splitLine: {
  87. show: false
  88. },
  89. axisLine: {
  90. show: false
  91. },
  92. axisTick: {
  93. show: false
  94. },
  95. axisLabel: {
  96. interval: 0,
  97. formatter: function (params) {
  98. var newParamsName = ''
  99. const paramsNameNumber = params.length
  100. const provideNumber = 3 // 单行显示文字个数
  101. const rowNumber = Math.ceil(paramsNameNumber / provideNumber)
  102. if (paramsNameNumber > provideNumber) {
  103. for (let p = 0; p < rowNumber; p++) {
  104. var tempStr = ''
  105. var start = p * provideNumber
  106. var end = start + provideNumber
  107. if (p === rowNumber - 1) {
  108. tempStr = params.substring(start, paramsNameNumber)
  109. } else {
  110. tempStr = params.substring(start, end) + '\n'
  111. }
  112. newParamsName += tempStr
  113. }
  114. } else {
  115. newParamsName = params
  116. }
  117. return newParamsName
  118. },
  119. textStyle: {
  120. fontSize: 10 * scale,
  121. color: '#3fdaff'
  122. }
  123. }
  124. }],
  125. yAxis: [{
  126. type: 'value',
  127. splitLine: {
  128. show: false
  129. },
  130. axisLine: {
  131. show: false
  132. },
  133. axisTick: {
  134. show: false,
  135. inside: true,
  136. length: 10 * scale,
  137. lineStyle: {
  138. color: '#0b5263'
  139. }
  140. },
  141. axisLabel: {
  142. show: false,
  143. textStyle: {
  144. color: '#0b5263',
  145. fontSize: 10 * scale
  146. }
  147. },
  148. }],
  149. series: [
  150. //背景
  151. {
  152. name: 'bg',
  153. type: 'pictorialBar',
  154. barWidth: '45%',
  155. // barGap: '0%',
  156. silent: true,
  157. label: {
  158. normal: {
  159. show: true,
  160. position: "top",
  161. distance: 20 * scale,
  162. formatter: function (params) {
  163. var stuNum = 0;
  164. chartData.forEach(function (value, index, array) {
  165. if (params.name == value.name) {
  166. stuNum = value.value;
  167. }
  168. })
  169. return stuNum + '{white| 处}';
  170. },
  171. textStyle: {
  172. color: "#ffc72b",
  173. fontSize: 10 * scale
  174. },
  175. rich: rich
  176. }
  177. },
  178. symbol: 'image://' + bgImg,
  179. symbolClip: false,
  180. symbolBoundingData: maxValue,
  181. symbolSize: [15, '100%'],
  182. data: bgData
  183. },
  184. {
  185. name: '数据',
  186. type: 'pictorialBar',
  187. barWidth: '45%',
  188. barGap: '-100%',
  189. data: chartData,
  190. z: 3,
  191. symbol: 'image://' + fillImg,
  192. symbolClip: true,
  193. symbolBoundingData: maxValue,
  194. symbolSize: [15, '100%']
  195. },
  196. ]
  197. };
  198. option && myChart.setOption(option);
  199. },
  200. },
  201. }
  202. </script>
  203. <style rel="stylesheet/scss" lang="scss" scoped>
  204. .chart-container {
  205. width: 100%;
  206. height: auto;
  207. position: relative;
  208. padding-bottom: 10px;
  209. display: flex;
  210. }
  211. </style>