1# chart 2 3> **说明:** 4> 从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 5 6图表组件,用于呈现线形图、柱状图、量规图界面。 7 8## 权限列表 9 10无 11 12 13## 子组件 14 15不支持。 16 17 18## 属性 19 20除支持[通用属性](js-components-common-attributes.md)外,还支持如下属性: 21 22| 名称 | 类型 | 默认值 | 必填 | 描述 | 23| ------------------------------ | ---------------------------------------- | ---- | ---- | ---------------------------------------- | 24| type | string | line | 否 | 设置图表类型(不支持动态修改),可选项有:<br/>- bar:柱状图。<br/>- line:线形图。<br/>- gauge:量规图。<br/>- progress<sup>5+</sup>:进度类圆形图表。<br/>- loading<sup>5+</sup>:加载类圆形图表。<br/>- rainbow<sup>5+</sup>:占比类圆形图表。 | 25| options | ChartOptions | - | 否 | 图表参数设置,柱状图和线形图必须设置参数设置,量规图不生效。可以设置x轴、y轴的最小值、最大值、刻度数、是否显示,线条宽度、是否平滑等。(不支持动态修改) | 26| datasets | Array<ChartDataset> | - | 否 | 数据集合,柱状图和线形图必须设置数据集合,量规图不生效。可以设置多条数据集及其背景色。 | 27| segments<sup>5+</sup> | DataSegment \| Array<DataSegment> | - | 否 | 进度类、加载类和占比类圆形图表使用的数据结构。<br/>DataSegment针对进度类和加载类圆形图表使用,<br/>Array<DataSegment>针对占比类图标使用,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 | <color> | \#ff6384 | 否 | 仅线形图支持设置线条颜色。 | 44| fillColor | <color> | \#ff6384 | 否 | 填充颜色。<br>线形图表示填充的渐变颜色。 | 45| data | Array<number> \| Array<Point><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 | <color> | \#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 | <length> | 1px | 否 | 线宽设置。 | 73| smooth | boolean | false | 否 | 是否平滑。 | 74 75**表6** PointStyle 76 77| 名称 | 类型 | 默认值 | 必填 | 描述 | 78| ----------- | -------------- | -------- | ---- | ---------------------------------------- | 79| shape | string | circle | 否 | 高亮点的形状。可选值为:<br/>- circle:圆形。<br/>- square:方形。<br/>- triangle:三角形。 | 80| size | <length> | 5px | 否 | 高亮点的大小。 | 81| strokeWidth | <length> | 1px | 否 | 边框宽度 | 82| strokeColor | <color> | \#ff0000 | 否 | 边框颜色。 | 83| fillColor | <color> | \#ff0000 | 否 | 填充颜色。 | 84 85**表7** ChartLoop 86 87| 名称 | 类型 | 默认值 | 必填 | 描述 | 88| -------- | -------------- | ----- | ---- | ---------------------------------------- | 89| margin | <length> | 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 | <color> | \#000000 | 否 | 表示注释文字的颜色。 | 101| lineDash | string | solid | 否 | 表示绘制当前线段虚线的样式。“dashed, 5, 5”表示纯虚线,绘制5px的实线后留5px的空白。“solid”表示绘制实线。 | 102| lineColor | <color> | \#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 | <length> | 32px(量规)<br/>24px(占比类圆形图表) | 否 | 量规、占比类圆形图表组件刻度条的宽度。 | 141| start-angle | <deg> | 240(量规)<br/>0(占比类圆形图表) | 否 | 量规、占比类圆形图表组件刻度条起始角度,以时钟0点为基线。范围为0到360。 | 142| total-angle | <deg> | 240(量规)<br/>360(占比类圆形图表) | 否 | 量规、占比类圆形图表组件刻度条总长度,范围为-360到360,负数标识起点到终点为逆时针。 | 143| center-x | <length> | - | 否 | 量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-y和radius一起配置才能生效。(仅量规图支持) | 144| center-y | <length> | - | 否 | 量规组件刻度条中心位置,该样式优先于通用样式的position样式。该样式需要和center-x和radius一起配置才能生效。(仅量规图支持) | 145| radius | <length> | - | 否 | 量规组件刻度条半径,该样式优先于通用样式的width和height样式。该样式需要和center-x和center-y一起配置才能生效。(仅量规图支持) | 146| colors | Array | - | 否 | 量规组件刻度条每一个区段的颜色。<br/>如:colors: \#ff0000, \#00ff00。(仅量规图支持) | 147| weights | Array | - | 否 | 量规组件刻度条每一个区段的权重。<br/>如:weights: 2, 2。(仅量规图支持) | 148| font-family<sup>5+</sup> | Array | - | 否 | 表示绘制注释的字体样式,支持[自定义字体](js-components-common-customizing-font.md)。 | 149| font-size<sup>5+</sup> | <length> | - | 否 | 表示绘制注释的字体的大小。 | 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: number, <br/>data: Array<number>, <br/>} | 向已有的数据序列中动态添加数据,根据serial指定目标序列,serial为datasets数组的下标,从0开始。假设serial的值为index,使用data数据更新datasets[index].data。仅线形图支持,按横坐标加1递增(与xAxis 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  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  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  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 