1# chart
2
3>  **说明:**
4>  从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
5
6图表组件,用于呈现线形图、柱状图、量规图界面。
7
8## 权限列表
9
1011
12
13## 子组件
14
15不支持。
16
17
18## 属性
19
20除支持[通用属性](js-components-common-attributes.md)外,还支持如下属性:
21
22| 名称                             | 类型                                       | 默认值  | 必填   | 描述                                       |
23| ------------------------------ | ---------------------------------------- | ---- | ---- | ---------------------------------------- |
24| type                           | string                                   | line | 否    | 设置图表类型(不支持动态修改),可选项有:<br/>-&nbsp;bar:柱状图。<br/>-&nbsp;line:线形图。<br/>-&nbsp;gauge:量规图。<br/>-&nbsp;progress<sup>5+</sup>:进度类圆形图表。<br/>-&nbsp;loading<sup>5+</sup>:加载类圆形图表。<br/>-&nbsp;rainbow<sup>5+</sup>:占比类圆形图表。 |
25| options                        | ChartOptions                             | -    | 否    | 图表参数设置,柱状图和线形图必须设置参数设置,量规图不生效。可以设置x轴、y轴的最小值、最大值、刻度数、是否显示,线条宽度、是否平滑等。(不支持动态修改) |
26| datasets                       | Array&lt;ChartDataset&gt;                | -    | 否    | 数据集合,柱状图和线形图必须设置数据集合,量规图不生效。可以设置多条数据集及其背景色。 |
27| segments<sup>5+</sup>          | DataSegment&nbsp;\|&nbsp;Array&lt;DataSegment&gt; | -    | 否    | 进度类、加载类和占比类圆形图表使用的数据结构。<br/>DataSegment针对进度类和加载类圆形图表使用,<br/>Array&lt;DataSegment&gt;针对占比类图标使用,DataSegment最多9个。 |
28| effects<sup>5+</sup>           | boolean                                  | true | 否    | 是否开启占比类、进度类圆形图表特效。                       |
29| animationduration<sup>6+</sup> | number                                   | 3000 | 否    | 设置占比类圆形图表展开动画时长,单位为ms。                   |
30
31**表1** ChartOptions
32
33| 名称     | 类型          | 默认值  | 必填   | 描述                                       |
34| ------ | ----------- | ---- | ---- | ---------------------------------------- |
35| xAxis  | ChartAxis   | -    | 是    | x轴参数设置。可以设置x轴最小值、最大值、刻度数以及是否显示。          |
36| yAxis  | ChartAxis   | -    | 是    | y轴参数设置。可以设置y轴最小值、最大值、刻度数以及是否显示。          |
37| series | ChartSeries | -    | 否    | 仅线形图支持设置数据序列参数,可以设置的样式:<br>- 线的样式,如线宽、是否平滑。<br>- 设置线最前端位置白点的样式和大小。 |
38
39**表2** ChartDataset
40
41| 名称          | 类型                                       | 默认值      | 必填   | 描述                     |
42| ----------- | ---------------------------------------- | -------- | ---- | ---------------------- |
43| strokeColor | &lt;color&gt;                            | \#ff6384 | 否    | 仅线形图支持设置线条颜色。          |
44| fillColor   | &lt;color&gt;                            | \#ff6384 | 否    | 填充颜色。<br>线形图表示填充的渐变颜色。 |
45| data        | Array&lt;number&gt;&nbsp;\|&nbsp;Array&lt;Point&gt;<sup>5+</sup> | -        | 是    | 设置绘制线或柱中的点集。           |
46| gradient    | boolean                                  | false    | 否    | 仅线形图支持设置是否显示填充渐变颜色。    |
47
48**表3** ChartAxis
49
50| 名称       | 类型            | 默认值      | 必填   | 描述                                       |
51| -------- | ------------- | -------- | ---- | ---------------------------------------- |
52| min      | number        | 0        | 否    | 轴的最小值,仅线形图支持负数。                          |
53| max      | number        | 100      | 否    | 轴的最大值,仅线形图支持负数。                          |
54| axisTick | number        | 10       | 否    | 轴显示的刻度数量。仅支持1~20,且具体显示的效果与图的宽度所占的像素/(max-min)有关。<br/>在柱状图中,每组数据显示的柱子数量与刻度数量一致,且柱子显示在刻度处。 |
55| display  | boolean       | false    | 否    | 是否显示轴。                                   |
56| color    | &lt;color&gt; | \#c0c0c0 | 否    | 轴颜色。                                     |
57
58**表4** ChartSeries
59
60| 名称          | 类型             | 默认值  | 必填   | 描述                   |
61| ----------- | -------------- | ---- | ---- | -------------------- |
62| lineStyle   | ChartLineStyle | -    | 否    | 线样式设置,如线宽、是否平滑。      |
63| headPoint   | PointStyle     | -    | 否    | 线最前端位置白点的样式和大小。      |
64| topPoint    | PointStyle     | -    | 否    | 最高点的样式和大小。           |
65| bottomPoint | PointStyle     | -    | 否    | 最低点的样式和大小。           |
66| loop        | ChartLoop      | -    | 否    | 设置屏幕显示满时,是否需要重头开始绘制。 |
67
68**表5** ChartLineStyle
69
70| 名称     | 类型             | 默认值   | 必填   | 描述    |
71| ------ | -------------- | ----- | ---- | ----- |
72| width  | &lt;length&gt; | 1px   | 否    | 线宽设置。 |
73| smooth | boolean        | false | 否    | 是否平滑。 |
74
75**表6** PointStyle
76
77| 名称          | 类型             | 默认值      | 必填   | 描述                                       |
78| ----------- | -------------- | -------- | ---- | ---------------------------------------- |
79| shape       | string         | circle   | 否    | 高亮点的形状。可选值为:<br/>-&nbsp;circle:圆形。<br/>-&nbsp;square:方形。<br/>-&nbsp;triangle:三角形。 |
80| size        | &lt;length&gt; | 5px      | 否    | 高亮点的大小。                                  |
81| strokeWidth | &lt;length&gt; | 1px      | 否    | 边框宽度                                     |
82| strokeColor | &lt;color&gt;  | \#ff0000 | 否    | 边框颜色。                                    |
83| fillColor   | &lt;color&gt;  | \#ff0000 | 否    | 填充颜色。                                    |
84
85**表7** ChartLoop
86
87| 名称       | 类型             | 默认值   | 必填   | 描述                                       |
88| -------- | -------------- | ----- | ---- | ---------------------------------------- |
89| margin   | &lt;length&gt; | 1     | 否    | 擦除点的个数(最新绘制的点与最老的点之间的横向距离)。轻量设备margin和topPoint/bottomPoint/headPoint同时使用时,有概率出现point正好位于擦除区域的情况,导致point不可见,因此不建议同时使用。 |
90| gradient | boolean        | false | 否    | 是否需要渐变擦除。                                |
91
92**表8** Point<sup>5+</sup>
93
94| 名称           | 类型            | 默认值      | 必填   | 描述                                       |
95| ------------ | ------------- | -------- | ---- | ---------------------------------------- |
96| value        | number        | 0        | 是    | 表示绘制点的Y轴坐标。                              |
97| pointStyle   | PointStyle    | -        | 否    | 表示当前数据点的绘制样式。                            |
98| description  | string        | -        | 否    | 表示当前点的注释内容。                              |
99| textLocation | string        | -        | 否    | 可选值为top,bottom,none。分别表示注释的绘制位置位于点的上方,下方,以及不绘制。 |
100| textColor    | &lt;color&gt; | \#000000 | 否    | 表示注释文字的颜色。                               |
101| lineDash     | string        | solid    | 否    | 表示绘制当前线段虚线的样式。“dashed,&nbsp;5,&nbsp;5”表示纯虚线,绘制5px的实线后留5px的空白。“solid”表示绘制实线。 |
102| lineColor    | &lt;color&gt; | \#000000 | 否    | 表示绘制当前线段的颜色。此颜色不设置会默认使用整体的strokeColor。   |
103
104**表9** DataSegment<sup>5+</sup>
105
106| 名称         | 类型     | 默认值  | 必填   | 描述                                       |
107| ---------- | ------ | ---- | ---- | ---------------------------------------- |
108| startColor | Color  | -    | 否    | 起始位置的颜色,设置startColor必须设置endColor。不设置startColor时,会使用系统默认预置的颜色数组,具体颜色值见下表。 |
109| endColor   | Color  | -    | 否    | 终止位置的颜色,设置endColor必须设置startColor。<br/>不设置startColor时,会使用系统默认预置的颜色数组。 |
110| value      | number | 0    | 是    | 占比数据的所占份额,最大100。                         |
111| name       | string | -    | 否    | 此类数据的名称。                                 |
112
113| 数据组  | 浅色主题                        | 深色主题                        |
114| ---- | --------------------------- | --------------------------- |
115| 0    | 起始颜色:\#f7ce00,结束颜色:\#f99b11 | 起始颜色:\#d1a738,结束颜色:\#eb933d |
116| 1    | 起始颜色:\#f76223,结束颜色:\#f2400a | 起始颜色:\#e67d50,结束颜色:\#d9542b |
117| 2    | 起始颜色:\#f772ac,结束颜色:\#e65392 | 起始颜色:\#d5749e,结束颜色:\#d6568d |
118| 3    | 起始颜色:\#a575eb,结束颜色:\#a12df7 | 起始颜色:\#9973d1,结束颜色:\#5552d9 |
119| 4    | 起始颜色:\#7b79f7,结束颜色:\#4b48f7 | 起始颜色:\#7977d9,结束颜色:\#f99b11 |
120| 5    | 起始颜色:\#4b8af3,结束颜色:\#007dff | 起始颜色:\#4c81d9,结束颜色:\#217bd9 |
121| 6    | 起始颜色:\#73c1e6,结束颜色:\#4fb4e3 | 起始颜色:\#5ea6d1,结束颜色:\#4895c2 |
122| 7    | 起始颜色:\#a5d61d,结束颜色:\#69d14f | 起始颜色:\#91c23a,结束颜色:\#70ba5d |
123| 8    | 起始颜色:\#a2a2b0,结束颜色:\#8e8e93 | 起始颜色:\#8c8c99,结束颜色:\#6b6b76 |
124
125当类型为量规图时,还支持如下属性:
126
127| 名称      | 类型     | 默认值  | 必填   | 描述                     |
128| ------- | ------ | ---- | ---- | ---------------------- |
129| percent | number | 0    | 否    | 当前值占整体的百分比,取值范围为0-100。 |
130
131
132## 样式
133
134
135
136除支持[通用样式](js-components-common-styles.md)外,还支持如下样式:
137
138| 名称                       | 类型             | 默认值                        | 必填   | 描述                                       |
139| ------------------------ | -------------- | -------------------------- | ---- | ---------------------------------------- |
140| stroke-width             | &lt;length&gt; | 32px(量规)<br/>24px(占比类圆形图表) | 否    | 量规、占比类圆形图表组件刻度条的宽度。                      |
141| start-angle              | &lt;deg&gt;    | 240(量规)<br/>0(占比类圆形图表)     | 否    | 量规、占比类圆形图表组件刻度条起始角度,以时钟0点为基线。范围为0到360。   |
142| total-angle              | &lt;deg&gt;    | 240(量规)<br/>360(占比类圆形图表)   | 否    | 量规、占比类圆形图表组件刻度条总长度,范围为-360到360,负数标识起点到终点为逆时针。 |
143| center-x                 | &lt;length&gt; | -                          | 否    | 量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-y和radius一起配置才能生效。(仅量规图支持) |
144| center-y                 | &lt;length&gt; | -                          | 否    | 量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-x和radius一起配置才能生效。(仅量规图支持) |
145| radius                   | &lt;length&gt; | -                          | 否    | 量规组件刻度条半径,该样式优先于通用样式的width和height样式。该样式需要和center-x和center-y一起配置才能生效。(仅量规图支持) |
146| colors                   | Array          | -                          | 否    | 量规组件刻度条每一个区段的颜色。<br/>如:colors:&nbsp;\#ff0000,&nbsp;\#00ff00。(仅量规图支持) |
147| weights                  | Array          | -                          | 否    | 量规组件刻度条每一个区段的权重。<br/>如:weights:&nbsp;2,&nbsp;2。(仅量规图支持) |
148| font-family<sup>5+</sup> | Array          | -                          | 否    | 表示绘制注释的字体样式,支持[自定义字体](js-components-common-customizing-font.md)。 |
149| font-size<sup>5+</sup>   | &lt;length&gt; | -                          | 否    | 表示绘制注释的字体的大小。                            |
150
151
152## 事件
153
154支持[通用事件](js-components-common-events.md)。
155
156
157## 方法
158
159除支持[通用方法](js-components-common-methods.md)外,还支持如下方法:
160
161| 方法     | 参数                                       | 描述                                       |
162| ------ | ---------------------------------------- | ---------------------------------------- |
163| append | {<br/>serial:&nbsp;number,&nbsp;<br/>data:&nbsp;Array&lt;number&gt;,&nbsp;<br/>} | 向已有的数据序列中动态添加数据,根据serial指定目标序列,serial为datasets数组的下标,从0开始。假设serial的值为index,使用data数据更新datasets[index].data。仅线形图支持,按横坐标加1递增(与xAxis&nbsp;min/max设置相关)。 |
164
165## 示例
166
1671. 线形图
168   ```html
169   <!-- xxx.hml -->
170   <div class="container">
171     <stack class="chart-region">
172       <image class="chart-background" src="common/background.png"></image>
173       <chart class="chart-data" type="line" ref="linechart" options="{{lineOps}}" datasets="{{lineData}}"></chart>
174     </stack>
175     <button value="Add data" onclick="addData"></button>
176   </div>
177   ```
178
179   ```css
180   /* xxx.css */
181   .container {
182     flex-direction: column;
183     justify-content: center;
184     align-items: center;
185   }
186   .chart-region {
187     height: 400px;
188     width: 700px;
189   }
190   .chart-background {
191     object-fit: fill;
192   }
193   .chart-data {
194     width: 700px;
195     height: 600px;
196   }
197   button {
198     width: 100%;
199     height: 50px;
200     background-color: #F4F2F1;
201     text-color: #0C81F3;
202   }
203   ```
204
205   ```js
206   // xxx.js
207   export default {
208     data: {
209       lineData: [
210         {
211           strokeColor: '#0081ff',
212           fillColor: '#cce5ff',
213           data: [763, 550, 551, 554, 731, 654, 525, 696, 595, 628, 791, 505, 613, 575, 475, 553, 491, 680, 657, 716],
214           gradient: true
215         }
216       ],
217       lineOps: {
218         xAxis: {
219           min: 0,
220           max: 20,
221           display: false
222         },
223         yAxis: {
224           min: 0,
225           max: 1000,
226           display: false
227         },
228         series: {
229           lineStyle: {
230             width: "5px",
231             smooth: true
232           },
233           headPoint: {
234             shape: "circle",
235             size: 20,
236             strokeWidth: 5,
237             fillColor: '#ffffff',
238             strokeColor: '#007aff',
239             display: true
240           },
241           loop: {
242             margin: 2,
243             gradient: true
244           }
245         }
246       }
247     },
248     addData() {
249       this.$refs.linechart.append({
250         serial: 0,
251         data: [Math.floor(Math.random() * 400) + 400]
252       })
253     }
254   }
255   ```
256
257   ![zh-cn_image_0000001173324843](figures/zh-cn_image_0000001173324843.png)
258
2592. 柱状图
260   ```html
261   <!-- xxx.hml -->
262   <div class="container">
263     <stack class="data-region">
264       <image class="data-background" src="common/background.png"></image>
265       <chart class="data-bar" type="bar" id="bar-chart" options="{{barOps}}" datasets="{{barData}}"></chart>
266     </stack>
267   </div>
268   ```
269
270   ```css
271   /* xxx.css */
272   .container {
273     flex-direction: column;
274     justify-content: center;
275     align-items: center;
276   }
277   .data-region {
278     height: 400px;
279     width: 700px;
280   }
281   .data-background {
282     object-fit: fill;
283   }
284   .data-bar {
285     width: 700px;
286     height: 400px;
287   }
288   ```
289
290   ```js
291   // xxx.js
292   export default {
293     data: {
294       barData: [
295         {
296           fillColor: '#f07826',
297           data: [763, 550, 551, 554, 731, 654, 525, 696, 595, 628]
298         },
299         {
300           fillColor: '#cce5ff',
301           data: [535, 776, 615, 444, 694, 785, 677, 609, 562, 410]
302         },
303         {
304           fillColor: '#ff88bb',
305           data: [673, 500, 574, 483, 702, 583, 437, 506, 693, 657]
306         },
307       ],
308       barOps: {
309         xAxis: {
310           min: 0,
311           max: 20,
312           display: false,
313           axisTick: 10
314         },
315         yAxis: {
316           min: 0,
317           max: 1000,
318           display: false
319         }
320       }
321     }
322   }
323   ```
324
325   ![zh-cn_image_0000001173164929](figures/zh-cn_image_0000001173164929.png)
326
3273. 量规图
328   ```html
329   <!-- xxx.hml -->
330   <div class="container">
331     <div class="gauge-region">
332       <chart class="data-gauge" type="gauge" percent = "50"></chart>
333     </div>
334   </div>
335   ```
336
337   ```css
338   /* xxx.css */
339   .container {
340     flex-direction: column;
341     justify-content: center;
342     align-items: center;
343   }
344   .gauge-region {
345     height: 400px;
346     width: 400px;
347   }
348   .data-gauge {
349     colors: #83f115, #fd3636, #3bf8ff;
350     weights: 4, 2, 1;
351   }
352   ```
353
354   ![zh-cn_image_0000001127125264](figures/zh-cn_image_0000001127125264.png)
355
3564. 进度类、加载类、占比类圆形图表
357   ```html
358   <!-- xxx.hml -->
359   <div class="container">
360       <text class="text">progress Example</text>
361       <stack class="chart-region">
362           <chart class="" type="progress" segments="{{ progressdata }}"></chart>
363       </stack>
364       <text class="text">loading Example</text>
365       <stack class="chart-region">
366           <chart class="" type="loading" segments="{{ loadingdata }}"></chart>
367       </stack>
368       <text class="text">rainbow Example</text>
369       <stack class="chart-region">
370           <chart class="" type="rainbow" segments="{{ rainbowdata }}" effects="true" animationduration="5000"></chart>
371       </stack>
372   </div>
373   ```
374   ```css
375   /* xxx.css */
376   .container {
377       flex-direction: column;
378       justify-content: center;
379       align-items: center;
380   }
381   .chart-region {
382       height: 400px;
383       width: 700px;
384       margin-top: 10px;
385   }
386   .text {
387       margin-top: 30px;
388   }
389   ```
390   ```js
391   // xxx.js
392   export default {
393      data: {
394         progressdata: {
395            value: 50,
396            name: 'progress'
397         },
398         loadingdata: {
399            startColor: "#ffc0cb",
400            endColor: "#00bfff",
401         },
402         rainbowdata: [
403            {
404               value: 50,
405               name: 'item1'
406            },
407            {
408               value: 10,
409               name: 'item2'
410            },
411            {
412               value: 20,
413               name: 'item3'
414            },
415            {
416               value: 10,
417               name: 'item4'
418            },
419            {
420               value: 10,
421               name: 'item5'
422            }
423         ]
424      }
425   }
426   ```
427   ![rainbow](figures/rainbow.gif)