├── License
├── MyECharts
└── resource
│ ├── ECharts
│ └── echarts.js
│ └── MyECharts.js
├── README.md
├── demo.html
├── index.html
└── readme.txt
/License:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Lean Fish
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/MyECharts/resource/MyECharts.js:
--------------------------------------------------------------------------------
1 | //各种图形需要的数据结构:
2 | //
3 | //pie图:
4 | /* [
5 | { name: 'Firefox', value: 45.0 },
6 | { name: 'IE', value: 26.8 },
7 | { name: 'Safari', value: 8.5 },
8 | { name: 'Opera', value: 6.2 },
9 | { name: '其他', value: 0.7 }];
10 |
11 | Line图、Bar图:
12 | [
13 | { group: 'Beijing', name: '1月', value: 10 },
14 | { group: 'Beijing', name: '2月', value: 15 },
15 | { group: 'Beijing', name: '3月', value: 12 },
16 | { group: 'Beijing', name: '4月', value: 14 },
17 | { group: 'Tokyo', name: '1月', value: 12 },
18 | { group: 'Tokyo', name: '2月', value: 15 },
19 | { group: 'Tokyo', name: '3月', value: 2 },
20 | { group: 'Tokyo', name: '4月', value: 14 }];
21 |
22 | //散点图
23 | var dataAll = [
24 | [
25 | [10.0, 8.04],
26 | [8.0, 6.95],
27 | [13.0, 7.58],
28 | [9.0, 8.81],
29 | [11.0, 8.33],
30 | [14.0, 9.96],
31 | [6.0, 7.24],
32 | [4.0, 4.26],
33 | [12.0, 10.84],
34 | [7.0, 4.82],
35 | [5.0, 5.68]
36 | ],
37 | [
38 | [10.0, 9.14],
39 | [8.0, 8.14],
40 | [13.0, 8.74],
41 | [9.0, 8.77],
42 | [11.0, 9.26],
43 | [14.0, 8.10],
44 | [6.0, 6.13],
45 | [4.0, 3.10],
46 | [12.0, 9.13],
47 | [7.0, 7.26],
48 | [5.0, 4.74]
49 | ],
50 | [
51 | [10.0, 7.46],
52 | [8.0, 6.77],
53 | [13.0, 12.74],
54 | [9.0, 7.11],
55 | [11.0, 7.81],
56 | [14.0, 8.84],
57 | [6.0, 6.08],
58 | [4.0, 5.39],
59 | [12.0, 8.15],
60 | [7.0, 6.42],
61 | [5.0, 5.73]
62 | ],
63 | [
64 | [8.0, 6.58],
65 | [8.0, 5.76],
66 | [8.0, 7.71],
67 | [8.0, 8.84],
68 | [8.0, 8.47],
69 | [8.0, 7.04],
70 | [8.0, 5.25],
71 | [19.0, 12.50],
72 | [8.0, 5.56],
73 | [8.0, 7.91],
74 | [8.0, 6.89]
75 | ]
76 | ];
77 |
78 | */
79 | /*
80 | 2017-04-08,创建
81 | */
82 |
83 | //判断数组中是否包含某个元素
84 | Array.prototype.contains = function (obj) {
85 | var i = this.length;
86 | while (i--) {
87 | if (this[i] === obj) {
88 | return true;
89 | }
90 | }
91 | return false;
92 | }
93 |
94 | var MyECharts = {
95 | //格式化数据
96 | ChartDataFormate: {
97 | FormateNOGroupData: function (data) {
98 | var categories = [];
99 | var datas = [];
100 | for (var i = 0; i < data.length; i++) {
101 | categories.push(data[i].name || '');
102 | temp_series = { value: data[i].value || 0, name: data[i].name };
103 | datas.push(temp_series);
104 | }
105 | return { category: categories, data: datas };
106 | },
107 | //处理分组数据,数据格式:group:XXX,name:XXX,value:XXX用于折线图、柱形图(分组,堆积)
108 | //参数:数据、展示类型
109 | FormatGroupData: function (data, type) {
110 | var groups = new Array();
111 | var names = new Array();
112 | var series = new Array();
113 | for (var i = 0; i < data.length; i++) {
114 | if (!groups.contains(data[i].group)) {
115 | groups.push(data[i].group);
116 | }
117 | if (!names.contains(data[i].name)) {
118 | names.push(data[i].name);
119 | }
120 | }
121 | for (var i = 0; i < groups.length; i++) {
122 | var temp_series = {};
123 | var temp_data = new Array();
124 | for (var j = 0; j < data.length; j++) {
125 | for (var k = 0; k < names.length; k++)
126 | if (groups[i] == data[j].group && data[j].name == names[k])
127 | temp_data.push(data[j].value);
128 | }
129 | temp_series = { name: groups[i], type: type, data: temp_data };
130 | series.push(temp_series);
131 | }
132 | return { legend: groups,category: names, series: series };
133 | }
134 | },
135 | //生成图形
136 | ChartOptionTemplates: {
137 | //柱状图
138 | Bar: function (title, subtext, data) {
139 | var datas = MyECharts.ChartDataFormate.FormatGroupData(data, 'bar');
140 | var option = {
141 | title: {
142 | text: title || '',
143 | subtext: subtext || ''
144 | },
145 | legend: {
146 | data:datas.legend
147 | },
148 | tooltip: {
149 | trigger: 'axis'
150 | },
151 | calculable : true,
152 | toolbox: {
153 | show : true,
154 | feature : {
155 | mark : {show: true},
156 | dataView : {show: true, readOnly: false},
157 | magicType : {show: true, type: ['line', 'bar']},
158 | restore : {show: true},
159 | saveAsImage : {show: true}
160 | }
161 | },
162 | xAxis: [
163 | {
164 | type: 'category',
165 | data: datas.category
166 | }
167 | ],
168 | yAxis: [
169 | {
170 | type: 'value'
171 | }
172 | ],
173 | series: datas.series
174 | };
175 | return option;
176 | },
177 | //折线图
178 | Line: function (title, subtext, data) {
179 | var datas = MyECharts.ChartDataFormate.FormatGroupData(data, 'line');
180 | var option = {
181 | title: {
182 | text: title || '',
183 | subtext: subtext || ''
184 | },
185 | legend: {
186 | data:datas.legend
187 | },
188 | tooltip: {
189 | show: true
190 | },
191 | xAxis: [
192 | {
193 | type: 'category',
194 | data: datas.category
195 | }
196 | ],
197 | yAxis: [
198 | {
199 | type: 'value'
200 | }
201 | ],
202 | series: datas.series
203 | };
204 | return option;
205 | },
206 | //饼图
207 | Pie: function (title, subtext, data) {
208 | var datas = MyECharts.ChartDataFormate.FormateNOGroupData(data);
209 | var option = {
210 | title: {
211 | text: title || '',
212 | subtext: subtext || ''
213 | },
214 | tooltip: {
215 | show: true,
216 | trigger: 'item',
217 | formatter: "{a}
{b} : {c} ({d}%)"
218 | },
219 | legend: {
220 | orient: 'vertical',
221 | left: 'left',
222 | data: datas.category
223 | },
224 | series: [
225 | {
226 | name: title,
227 | type: 'pie',
228 | radius: '55%',
229 | center: ['50%', '60%'],
230 | data: datas.data,
231 | itemStyle: {
232 | emphasis: {
233 | shadowBlur: 10,
234 | shadowOffsetX: 0,
235 | shadowColor: 'rgba(0, 0, 0, 0.5)'
236 | }
237 | }
238 | }
239 | ]
240 | };
241 | return option;
242 | },
243 | //散点图
244 | Scatter: function (title, subtext, data) {
245 | var markLineOpt = {
246 | animation: false,
247 | label: {
248 | normal: {
249 | formatter: 'y = 0.5 * x + 3',
250 | textStyle: {
251 | align: 'right'
252 | }
253 | }
254 | },
255 | lineStyle: {
256 | normal: {
257 | type: 'solid'
258 | }
259 | },
260 | tooltip: {
261 | formatter: 'y = 0.5 * x + 3'
262 | },
263 | data: [[{
264 | coord: [0, 3],
265 | symbol: 'none'
266 | }, {
267 | coord: [20, 13],
268 | symbol: 'none'
269 | }]]
270 | };
271 |
272 |
273 | var option = {
274 | title: {
275 | text: 'Anscombe\'s quartet',
276 | x: 'center',
277 | y: 0
278 | },
279 | grid: [
280 | {x: '7%', y: '7%', width: '38%', height: '38%'},
281 | {x2: '7%', y: '7%', width: '38%', height: '38%'},
282 | {x: '7%', y2: '7%', width: '38%', height: '38%'},
283 | {x2: '7%', y2: '7%', width: '38%', height: '38%'}
284 | ],
285 | tooltip: {
286 | formatter: 'Group {a}: ({c})'
287 | },
288 | xAxis: [
289 | {gridIndex: 0, min: 0, max: 20},
290 | {gridIndex: 1, min: 0, max: 20},
291 | {gridIndex: 2, min: 0, max: 20},
292 | {gridIndex: 3, min: 0, max: 20}
293 | ],
294 | yAxis: [
295 | {gridIndex: 0, min: 0, max: 15},
296 | {gridIndex: 1, min: 0, max: 15},
297 | {gridIndex: 2, min: 0, max: 15},
298 | {gridIndex: 3, min: 0, max: 15}
299 | ],
300 | series: [
301 | {
302 | name: 'I',
303 | type: 'scatter',
304 | xAxisIndex: 0,
305 | yAxisIndex: 0,
306 | data: data[0],
307 | markLine: markLineOpt
308 | },
309 | {
310 | name: 'II',
311 | type: 'scatter',
312 | xAxisIndex: 1,
313 | yAxisIndex: 1,
314 | data: data[1],
315 | markLine: markLineOpt
316 | },
317 | {
318 | name: 'III',
319 | type: 'scatter',
320 | xAxisIndex: 2,
321 | yAxisIndex: 2,
322 | data: data[2],
323 | markLine: markLineOpt
324 | },
325 | {
326 | name: 'IV',
327 | type: 'scatter',
328 | xAxisIndex: 3,
329 | yAxisIndex: 3,
330 | data: data[3],
331 | markLine: markLineOpt
332 | }
333 | ]
334 | };
335 | return option;
336 | }
337 | },
338 | //图形展示
339 | //参数:图形option、图形显示区域id
340 | RenderChart: function (option, containerId) {
341 | var container = eval("document.getElementById('" + containerId + "');");//获取图形显示区域
342 | var myChart = echarts.init(container);
343 | myChart.setOption(option);// 为echarts对象加载数据
344 | }
345 | };
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 封装Echarts
2 | 百度的Echarts是一款丰富的前端展示框架,用于各种图表统计显示。但是使用起来还需要写大量重复的js代码,这里简单的封装了下,调用只需要写简短的代码即可。
3 |
4 | ## 图形展示
5 | 
6 |
7 | ## 代码实例
8 | 
9 |
10 | ## TODO
11 | >1. 有很多特性没有使用到,待研究ECharts官方文档;
12 | >2. 数据组织还很繁琐。
13 |
--------------------------------------------------------------------------------
/demo.html:
--------------------------------------------------------------------------------
1 |
2 |