You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2020/06/23 05:27:25 UTC

[incubator-echarts] branch label-enhancement updated (83df54f -> 58dc3f7)

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a change to branch label-enhancement
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git.


    from 83df54f  fix(label): label color is dark by default in pie and sunburst.
     add e2dac51  WIP(bar-racing): sort axis
     add e256517  WIP(bar-race): most logic without label animation
     add 82c70ab  feat(bar-race): one series done
     add a3afee5  WIP(bar-race): update during
     add 027b1be  WIP(bar-race): update animation
     add 853759b  merge next
     add 88a22eb  Fix lint
     add 7d9e04b  Merge pull request #12134 from susiwen8/lint
     add d252394  Update gansu.js
     add 86d1df7  Merge pull request #12139 from siminx/patch-1
     add fa5952a  fix(svg): download svg image with toolbox
     add 41da1fa  feat(svg): support exporting svg with connected charts
     add 8028f41  fix(svg): rename function name
     add 055dea0  fix 11799 add new option 'nameProperty' in map series option to denote key in geoJSON
     add da128eb  Merge pull request #12156 from alex2wong/fix-11799
     add 4f0ec36  fix(toolbox): only change title of requested feature. closes #12162
     add 331ac4a  Merge pull request #12168 from nsmgr8/toolbox-title-12162
     add ab47a24  Fix: minOpen is true will drop a piece
     add dbaa9bf  Correction base on CR
     add 80d389f  Merge pull request #12147 from susiwen8/#12121
     add 63790c0  fix(sunburst): default sunburst downplay not work.
     add 077b739  Merge pull request #12264 from apache/fix-sunburst-default-downplay
     add f5f0585  Feat: use auto calculate if min /max is null
     add 12d1c0e  add test case
     add c928a93  Revert some code due to failed test case
     add cf5812f  Merge pull request #12215 from susiwen8/#11829
     add 51925a0  fix(Series): check null pointer
     add 3754a24  Merge pull request #11718 from howel52/bug/null-pointer
     add d4f37c4  Merge pull request #12317 from apache/release
     add 58eec53  Fix: barBorderRadius didn't work
     add 0c85b83  add test case
     add b4b979a  Remove useless code
     add c57507e  Set bar background radius properly
     add fbe73ae  Merge pull request #12331 from susiwen8/#12321
     add ae07a9e  fix(heatmap): 1px gap between rect
     add 22aef46  Merge pull request #12342 from SnailSword/master
     add a94123e  fix(map): map animation when zoom and center change. fix #11947
     add 37dfd89  Merge pull request #12340 from apache/fix-11947
     add fdf240f  feat(scatter): make `symbolRotate` functional for scatter series.
     add 6f81cbf  Merge pull request #12348 from plainheart/feature/add_function_support_for_scatter_series
     add 4e2fe95  Merge pull request #1 from apache/master
     add 500157f  fix(effectScatter): the ripple effect of effectScatter does not rotate as the rotation of scatter symbol when using functional `symbolRotate`. close apache#12353.
     add 50bab74  Merge pull request #12354 from plainheart/fix/effect-scatter-ripple-not-rotate-as-expected
     add fb72a4c  fix: axis min/max function return null: The original PR is:  #12215 cf5812f6aad64e433c0de89c62bd0d84b7f3f0cf Fix from that: (1) The min/max function call should not be called twice (necessary and probably wrong input params). (2) `fixMin` `fixMax` should cover function return. (3) Add more test cases.
     add 8e99715  fix: bar background border radius. The original PR is #12331 fbe73aec2b265c99e78aebcf575b23bc339b60c8 This commit fixes: also update `r` when "update" rather than only in "add". Add more test cases.
     add 5817659  fix: remove peerDep, which is not used correctly.
     add 9088d73  [#12386] Added series.typeNames values values to english lang.
     add 57dd7a3  Merge pull request #12387 from BrianGilbert/feature/12386-chart-types-english-translation
     add d0f9bc5  Fix potential security risk
     add da618e5  put window.open in util
     add 8cd0789  align with previous
     add 7887f27  Merge pull request #12380 from susiwen8/target
     add 796d386  fix(pie): label not show when animation is disabled. fix #12110 (#12243)
     add 39dc974  fix(line): fix line clip bug in chromium
     add 4d06b72  Merge pull request #12393 from zhanfang/master
     add defffbe  fix(bmap): fix bmap style changed by the sdk and cause unexpected refresh bug.
     add 381b21e  Merge pull request #12411 from apache/improve-bmap
     add e9a7b95  fix(line): fix memory explosion issue with gradient, shadow and animation. #12229
     add d74fa6c  fix(line): tweak the magic number
     add f6744f1  Merge pull request #12410 from apache/line-fix-memory-explode
     add ecb4de9  showLoading align center #11790
     add b0c950b  adapt pr: showLoading align center
     add 0f63426  update pr: change arc.shape.r to opts.spinnerRadius
     add 84b1066  update pr: change 4*r to 2*r
     add d26cd1a  update pr: modify the __meta__.json
     add 8925f40  Merge pull request #12414 from apache/fix-11790
     add 6aabb4a  Calendar fix for DST
     add 630551b  Merge pull request #12172 from mikeyshing88/calendar-dst-fix
     add 0c1b295  fix(sunburst): lift sunburst with higher z2 on emphasis
     add 878829b  fix: calendar timezone bug in DST. Fix #12172. And add test cases.
     add 841794c  Add missing param for treemap setLabelStyle
     add 11da045  Merge pull request #11854 from susiwen8/#11772
     add 91f2dd5  Feature: add tooltip for edges(links) (#12006)
     add 8084fe3  Merge pull request #12011 from susiwen8/#12006
     add c18d9fc  Fix sankey link value is 0, node will disappear
     add 363f3e0  Merge pull request #12191 from susiwen8/#12189
     add 55bd42d  fix: Fix the incorrect implementation of `leavesModel` in `TreeSeries`: `leavesModel` should be inserted between the node `itemModel` and the `seriesModel` in the "parentModel" chain. It can be added either via [A] "beforeLink - nodeData.wrapMethod('getItemModel, ...)" or via [B] "TreeNode.getModel ". But `TreeSeres` both use the two strategy, which causes the `leavesModel` is inserted twice.
     add 8c2267d  fix: Enable treemap emphasis label formatter. Fix #11854. And add test cases. Note: the implementation of "insert levelModel" is modified from "Tree.getModel" to "beforeLink  nodeData.wrapMethod('getItemModel', ...)", because the former one miss the case of `data.getItemModel`, which is needed in label formatter fetcher.
     add 27687a7  fix: tweak #12191 (when edge value sum is 0, edge and node disappear)
     add ac9c8f5  Merge pull request #12478 from apache/master
     add 0f9f38b  fix syntax error
     add a85a03d  Merge pull request #12494 from apache/fix-syntax
     add 4a91a73  fix(axis): fix typo in #12371
     add d7edf07  Merge pull request #12497 from apache/fix-12371
     add 582cd73  fix(bar): fix bar background incorrect on polar
     add 911bd4b  Merge pull request #12501 from apache/fix-polar-bar-background
     add 1360a8e  fix(geo): fix default name property when parsing GeoJSON
     add 043ff9e  Merge pull request #12500 from apache/fix-geo-name-property
     add ced2c23  release: 4.8.0
     add 167ee79  release: upgrade zrender dep.
     add a74ce97  fix: zrender version should be fixed.
     add 3b61add  Merge pull request #12574 from apache/release-dev
     add dd3d83c  Merge branch 'release' into merge-release-to-next
     add 670ae04  ts: tweak ts type
     add 565535f  compat: compat `barBorderColor` `barBorderWidth` `barBorderRadius`.
     add 99260dd  ts: fix type.
     add e8c44b6  fix: fix bar compat bug brought in 565535fc9906a78e701819f62de42a0ffb0f674a
     add 4c1e406  Merge branch 'next' into merge-release-to-next
     add ce9f1e5  fix: rollback 565535fc9906a78e701819f62de42a0ffb0f674a. That will be compat in preprocessor.
     add 75d9cd8  Merge branch 'next' into merge-release-to-next
     add 5d081d1  Merge branch 'next' into feat-bar-race
     add 5b1485a  feat(bar-race): label value animation
     add 4d41640  feat(bar-race): label formatter
     add fb138d4  test(bar-race): update bar race test
     add fbdb003  ts: fix es class usage for inheritance.
     add 750d604  ts: dataset change to ts.
     add de86b1a  ts: export option
     add 103c9f7  Merge branch 'next' into feat-bar-race
     add bf5c08a  feat: provide elapsedTime in rendered event
     add b116faa  fix: some refactor about dataZoom and axis scale extent calculation:
     add 4a5f6d6  feature: Enable category axis min/max to shrink the other axis extent in cartesian. After this modification, if some data if out of the range of a category axis, the data item will not be filtered, but the extent of the other axis will be calculated based on the filtered data. If dataZoom is used in either of the xAxis or yAxis in that cartesian, the shrink will not be performed.
     add 6b95e3d  fix: fix some typo and comments
     add fca7f98  Merge pull request #12832 from apache/extent_filtered_by_other_axis
     add 6059708  merge
     add 628dd5c  fix(bar-race): fix merging axis extent from next
     add b526ecf  fix(bar-race): fix according to review comments
     add 662eea3  ts: fix type.
     add fe1666d  fix: resolve the circular dependency.
     add 3737601  Merge branch 'next' into feat-bar-race
     add 79fbcb9  Merge pull request #12484 from apache/feat-bar-race
     add eceee1b  core(ci): only run unit test on master or release branch
     add 6a9f86f  Merge pull request #12848 from apache/ci
     add 55794d0  ci: run on pr opened or synchronized
     add d0e5f43  feat: custom series compat.
     add b65758c  Merge branch 'next' into custom-series-enhance
     add eab38da  Merge branch 'next' into custom-series-enhance
     add 88c51a0  fix: fix custom series api.size in polor.
     add c56e2dc  feature: add duration animation for custom series.
     add 1309317  feature: support text animation on custom series (via in `during`)
     add a631dba  feature: support axis label/tick animation on polar radius axis, the same as cartesian axis.
     add d0315f2  chore: tweak and make better example for tutorial.
     add 389d643  Merge branch 'next' into custom-series-enhance
     add 1dffebc  feature: support clipPath and clipPath animation in custom series.
     add dfad53d  feature: enable "enterFrom" "leaveTo" "transition" animation setting in custom series.
     add 2f5de49  test: add test case for clip init.
     add 6c227d3  feature: custom series during callback params re-design.
     add 3a6ffe9  fix: fix custom series merge children strategy (force no empty children even thought merging children).
     add 1ee9379  test: add case for color transition in custom series.
     add d0e83c2  fix: little modify in during api: add return this to setter and change name from "setAttr" to "setTransform".
     add f42f395  Merge branch 'next' into custom-series-enhance
     add a7d4f69  clean code
     add 9963aa4  Merge pull request #12775 from apache/custom-series-enhance
     new 58dc3f7  Merge branch 'next' into label-enhancement

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/workflows/nodejs.yml                       |   12 +-
 dist/echarts-en.common.js                          |  520 ++++--
 dist/echarts-en.common.min.js                      |    2 +-
 dist/echarts-en.js                                 |  737 ++++++---
 dist/echarts-en.js.map                             |    2 +-
 dist/echarts-en.min.js                             |    2 +-
 dist/echarts-en.simple.js                          |  435 +++--
 dist/echarts-en.simple.min.js                      |    2 +-
 dist/echarts.common.js                             |  494 ++++--
 dist/echarts.common.min.js                         |    2 +-
 dist/echarts.js                                    |  711 +++++---
 dist/echarts.js.map                                |    2 +-
 dist/echarts.min.js                                |    2 +-
 dist/echarts.simple.js                             |  409 +++--
 dist/echarts.simple.min.js                         |    2 +-
 dist/extension/bmap.js                             |  338 +++-
 dist/extension/bmap.js.map                         |    2 +-
 dist/extension/bmap.min.js                         |    2 +-
 extension-src/bmap/BMapView.ts                     |    5 +-
 extension/bmap/BMapView.js                         |    8 +-
 map/js/province/gansu.js                           |    4 +-
 option.ts                                          |  107 ++
 package-lock.json                                  |    8 +-
 package.json                                       |    4 +-
 .../sunburst.ts => action/changeAxisOrder.ts}      |   32 +-
 src/chart/bar.ts                                   |    1 +
 src/chart/bar/BarSeries.ts                         |    4 +-
 src/chart/bar/BarView.ts                           |  300 +++-
 src/chart/bar/PictorialBarSeries.ts                |    2 +
 src/chart/custom.ts                                | 1745 ++++++++++++++++----
 src/chart/graph/GraphSeries.ts                     |    2 +-
 src/chart/heatmap/HeatmapView.ts                   |    4 +-
 src/chart/helper/EffectSymbol.ts                   |    3 +-
 src/chart/helper/LineDraw.ts                       |    6 +-
 src/chart/helper/Symbol.ts                         |    4 +-
 src/chart/helper/createClipPathFromCoordSys.ts     |    4 +
 src/chart/helper/labelHelper.ts                    |   15 +-
 src/chart/line/LineView.ts                         |   41 +-
 src/chart/map/MapSeries.ts                         |    8 +-
 src/chart/parallel/ParallelSeries.ts               |    2 +
 src/chart/sankey/sankeyLayout.ts                   |   22 +-
 src/chart/sunburst/SunburstPiece.ts                |    2 +
 src/chart/sunburst/SunburstView.ts                 |    3 +-
 src/chart/tree/TreeSeries.ts                       |    7 +-
 src/chart/treemap/TreemapSeries.ts                 |   21 +-
 src/chart/treemap/TreemapView.ts                   |   29 +-
 src/component/axis/RadiusAxisView.ts               |   11 +-
 src/component/dataZoom/AxisProxy.ts                |  115 +-
 src/component/dataZoom/DataZoomModel.ts            |    4 +-
 src/component/dataZoom/InsideZoomModel.ts          |    2 +-
 src/component/dataZoom/SliderZoomModel.ts          |    2 +-
 src/component/dataZoom/dataZoomProcessor.ts        |    2 +-
 src/component/dataZoom/helper.ts                   |    1 +
 src/component/dataset.ts                           |   49 +-
 src/component/gridSimple.ts                        |    1 +
 src/component/helper/MapDraw.ts                    |   36 +-
 src/component/timeline/SliderTimelineModel.ts      |    2 +-
 src/component/title.ts                             |    6 +-
 src/component/toolbox/ToolboxView.ts               |    2 +-
 src/component/toolbox/feature/MagicType.ts         |    3 +-
 src/component/toolbox/feature/SaveAsImage.ts       |    3 +-
 src/component/tooltip/TooltipView.ts               |    2 +-
 src/component/visualMap/PiecewiseModel.ts          |   16 +-
 src/coord/Axis.ts                                  |    2 +-
 src/coord/CoordinateSystem.ts                      |    3 +
 src/coord/axisCommonTypes.ts                       |   16 +-
 src/coord/axisHelper.ts                            |  167 +-
 src/coord/axisModelCommonMixin.ts                  |   57 +-
 src/coord/calendar/Calendar.ts                     |   17 +-
 src/coord/cartesian/Axis2D.ts                      |   15 +-
 src/coord/cartesian/AxisModel.ts                   |   26 +-
 src/coord/cartesian/Grid.ts                        |   65 +-
 src/coord/cartesian/GridModel.ts                   |    2 +-
 src/coord/cartesian/cartesianAxisHelper.ts         |   35 +
 src/coord/cartesian/defaultAxisExtentFromData.ts   |  262 +++
 src/coord/geo/GeoModel.ts                          |    4 +-
 src/coord/geo/geoJSONLoader.ts                     |    4 +-
 src/coord/geo/geoSourceManager.ts                  |    6 +-
 src/coord/geo/parseGeoJson.ts                      |    4 +-
 src/coord/polar/polarCreator.ts                    |   16 +-
 src/coord/polar/prepareCustom.ts                   |    1 +
 src/coord/radar/Radar.ts                           |    7 +-
 src/coord/scaleRawExtentInfo.ts                    |  321 ++++
 src/data/List.ts                                   |   15 +-
 src/data/Tree.ts                                   |   40 +-
 src/data/helper/dataStackHelper.ts                 |    6 +-
 src/echarts.ts                                     |  119 +-
 src/helper.ts                                      |    2 -
 src/langEN.ts                                      |   26 +
 src/loading/default.ts                             |   97 +-
 src/model/Component.ts                             |    5 +
 src/model/Series.ts                                |    2 +-
 src/model/mixin/dataFormat.ts                      |   24 +-
 src/model/mixin/itemStyle.ts                       |    4 +-
 src/scale/Ordinal.ts                               |   25 +-
 src/scale/Scale.ts                                 |    9 +-
 src/util/clazz.ts                                  |   16 +-
 src/util/format.ts                                 |   18 +-
 src/util/graphic.ts                                |  299 +++-
 src/util/styleCompat.ts                            |  256 +++
 src/util/types.ts                                  |   14 +-
 src/visual/symbol.ts                               |   18 +-
 test/axis-extrema.html                             |   39 +
 test/axis-filter-extent.html                       |  422 +++++
 test/bar-background.html                           |   68 +-
 test/bar-race.html                                 |  455 +++++
 test/calendar-timezone.html                        |  173 ++
 ...-d3.html => circle-packing-with-d3.compat.html} |    0
 test/circle-packing-with-d3.html                   |   50 +-
 test/custom-feature.html                           |  130 +-
 test/custom-text-content.html                      | 1193 +++++++++++++
 test/custom-transition-texture.js                  |    1 +
 test/custom-transition.html                        | 1490 +++++++++++++++++
 test/custom-transition2.html                       |  269 +++
 test/effectScatter2.html                           |  106 ++
 test/heatmap-gap-bug.html                          |  188 +++
 test/hoverStyle.html                               |    3 +-
 test/line-crash.html                               |  131 ++
 test/lines-bus.html                                |   17 +-
 test/loading.html                                  |   55 +-
 test/map-nameProperty.html                         |  252 +++
 test/map.html                                      |   72 +
 test/min-max-function.html                         |  117 +-
 test/pie-animation.html                            |   47 +-
 test/runTest/actions/__meta__.json                 |    4 +
 test/runTest/actions/bar-background.json           |    1 +
 test/runTest/actions/line-crash.json               |    1 +
 test/runTest/actions/pie-animation.json            |    1 +
 test/runTest/actions/treemap-action.json           |    1 +
 test/sankey-depth.html                             |   14 +-
 test/symbol3.html                                  |  105 ++
 ....html => toolbox-saveImage-background-svg.html} |   98 +-
 132 files changed, 11680 insertions(+), 2174 deletions(-)
 create mode 100644 option.ts
 copy src/{chart/sunburst.ts => action/changeAxisOrder.ts} (61%)
 create mode 100644 src/coord/cartesian/defaultAxisExtentFromData.ts
 create mode 100644 src/coord/scaleRawExtentInfo.ts
 create mode 100644 src/util/styleCompat.ts
 create mode 100644 test/axis-filter-extent.html
 create mode 100644 test/bar-race.html
 create mode 100644 test/calendar-timezone.html
 copy test/{circle-packing-with-d3.html => circle-packing-with-d3.compat.html} (100%)
 create mode 100644 test/custom-text-content.html
 create mode 100644 test/custom-transition-texture.js
 create mode 100644 test/custom-transition.html
 create mode 100644 test/custom-transition2.html
 create mode 100644 test/effectScatter2.html
 create mode 100644 test/heatmap-gap-bug.html
 create mode 100644 test/line-crash.html
 create mode 100644 test/map-nameProperty.html
 create mode 100644 test/runTest/actions/bar-background.json
 create mode 100644 test/runTest/actions/line-crash.json
 create mode 100644 test/runTest/actions/pie-animation.json
 create mode 100644 test/runTest/actions/treemap-action.json
 create mode 100644 test/symbol3.html
 copy test/{toolbox-saveImage-background.html => toolbox-saveImage-background-svg.html} (61%)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org


[incubator-echarts] 01/01: Merge branch 'next' into label-enhancement

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch label-enhancement
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit 58dc3f701961ef455019720670fe629430b57f6e
Merge: 83df54f 9963aa4
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Jun 23 13:26:39 2020 +0800

    Merge branch 'next' into label-enhancement

 .github/workflows/nodejs.yml                       |   12 +-
 dist/echarts-en.common.js                          |  520 ++++--
 dist/echarts-en.common.min.js                      |    2 +-
 dist/echarts-en.js                                 |  737 ++++++---
 dist/echarts-en.js.map                             |    2 +-
 dist/echarts-en.min.js                             |    2 +-
 dist/echarts-en.simple.js                          |  435 +++--
 dist/echarts-en.simple.min.js                      |    2 +-
 dist/echarts.common.js                             |  494 ++++--
 dist/echarts.common.min.js                         |    2 +-
 dist/echarts.js                                    |  711 +++++---
 dist/echarts.js.map                                |    2 +-
 dist/echarts.min.js                                |    2 +-
 dist/echarts.simple.js                             |  409 +++--
 dist/echarts.simple.min.js                         |    2 +-
 dist/extension/bmap.js                             |  338 +++-
 dist/extension/bmap.js.map                         |    2 +-
 dist/extension/bmap.min.js                         |    2 +-
 extension-src/bmap/BMapView.ts                     |    5 +-
 extension/bmap/BMapView.js                         |    8 +-
 map/js/province/gansu.js                           |    4 +-
 option.ts                                          |  107 ++
 package-lock.json                                  |    8 +-
 package.json                                       |    4 +-
 src/{chart/bar.ts => action/changeAxisOrder.ts}    |   39 +-
 src/chart/bar.ts                                   |    1 +
 src/chart/bar/BarSeries.ts                         |    4 +-
 src/chart/bar/BarView.ts                           |  300 +++-
 src/chart/bar/PictorialBarSeries.ts                |    2 +
 src/chart/custom.ts                                | 1745 ++++++++++++++++----
 src/chart/graph/GraphSeries.ts                     |    2 +-
 src/chart/heatmap/HeatmapView.ts                   |    4 +-
 src/chart/helper/EffectSymbol.ts                   |    3 +-
 src/chart/helper/LineDraw.ts                       |    6 +-
 src/chart/helper/Symbol.ts                         |    4 +-
 src/chart/helper/createClipPathFromCoordSys.ts     |    4 +
 src/chart/helper/labelHelper.ts                    |   15 +-
 src/chart/line/LineView.ts                         |   41 +-
 src/chart/map/MapSeries.ts                         |    8 +-
 src/chart/parallel/ParallelSeries.ts               |    2 +
 src/chart/sankey/sankeyLayout.ts                   |   22 +-
 src/chart/sunburst/SunburstPiece.ts                |    2 +
 src/chart/sunburst/SunburstView.ts                 |    3 +-
 src/chart/tree/TreeSeries.ts                       |    7 +-
 src/chart/treemap/TreemapSeries.ts                 |   21 +-
 src/chart/treemap/TreemapView.ts                   |   29 +-
 src/component/axis/RadiusAxisView.ts               |   11 +-
 src/component/dataZoom/AxisProxy.ts                |  115 +-
 src/component/dataZoom/DataZoomModel.ts            |    4 +-
 src/component/dataZoom/InsideZoomModel.ts          |    2 +-
 src/component/dataZoom/SliderZoomModel.ts          |    2 +-
 src/component/dataZoom/dataZoomProcessor.ts        |    2 +-
 src/component/dataZoom/helper.ts                   |    1 +
 src/component/dataset.ts                           |   49 +-
 src/component/gridSimple.ts                        |    1 +
 src/component/helper/MapDraw.ts                    |   36 +-
 src/component/timeline/SliderTimelineModel.ts      |    2 +-
 src/component/title.ts                             |    6 +-
 src/component/toolbox/ToolboxView.ts               |    2 +-
 src/component/toolbox/feature/MagicType.ts         |    3 +-
 src/component/toolbox/feature/SaveAsImage.ts       |    3 +-
 src/component/tooltip/TooltipView.ts               |    2 +-
 src/component/visualMap/PiecewiseModel.ts          |   16 +-
 src/coord/Axis.ts                                  |    2 +-
 src/coord/CoordinateSystem.ts                      |    3 +
 src/coord/axisCommonTypes.ts                       |   16 +-
 src/coord/axisHelper.ts                            |  167 +-
 src/coord/axisModelCommonMixin.ts                  |   57 +-
 src/coord/calendar/Calendar.ts                     |   17 +-
 src/coord/cartesian/Axis2D.ts                      |   15 +-
 src/coord/cartesian/AxisModel.ts                   |   26 +-
 src/coord/cartesian/Grid.ts                        |   65 +-
 src/coord/cartesian/GridModel.ts                   |    2 +-
 src/coord/cartesian/cartesianAxisHelper.ts         |   35 +
 src/coord/cartesian/defaultAxisExtentFromData.ts   |  262 +++
 src/coord/geo/GeoModel.ts                          |    4 +-
 src/coord/geo/geoJSONLoader.ts                     |    4 +-
 src/coord/geo/geoSourceManager.ts                  |    6 +-
 src/coord/geo/parseGeoJson.ts                      |    4 +-
 src/coord/polar/polarCreator.ts                    |   16 +-
 src/coord/polar/prepareCustom.ts                   |    1 +
 src/coord/radar/Radar.ts                           |    7 +-
 src/coord/scaleRawExtentInfo.ts                    |  321 ++++
 src/data/List.ts                                   |   15 +-
 src/data/Tree.ts                                   |   40 +-
 src/data/helper/dataStackHelper.ts                 |    6 +-
 src/echarts.ts                                     |  119 +-
 src/helper.ts                                      |    2 -
 src/langEN.ts                                      |   26 +
 src/loading/default.ts                             |   97 +-
 src/model/Component.ts                             |    5 +
 src/model/Series.ts                                |    2 +-
 src/model/mixin/dataFormat.ts                      |   24 +-
 src/model/mixin/itemStyle.ts                       |    4 +-
 src/scale/Ordinal.ts                               |   25 +-
 src/scale/Scale.ts                                 |    9 +-
 src/util/clazz.ts                                  |   16 +-
 src/util/format.ts                                 |   18 +-
 src/util/graphic.ts                                |  299 +++-
 src/util/styleCompat.ts                            |  256 +++
 src/util/types.ts                                  |   14 +-
 src/visual/symbol.ts                               |   18 +-
 test/axis-extrema.html                             |   39 +
 test/axis-filter-extent.html                       |  422 +++++
 test/bar-background.html                           |   68 +-
 test/bar-race.html                                 |  455 +++++
 test/calendar-timezone.html                        |  173 ++
 ...-d3.html => circle-packing-with-d3.compat.html} |    0
 test/circle-packing-with-d3.html                   |   50 +-
 test/custom-feature.html                           |  130 +-
 test/custom-text-content.html                      | 1193 +++++++++++++
 test/custom-transition-texture.js                  |    1 +
 test/custom-transition.html                        | 1490 +++++++++++++++++
 test/custom-transition2.html                       |  269 +++
 test/effectScatter2.html                           |  106 ++
 test/heatmap-gap-bug.html                          |  188 +++
 test/hoverStyle.html                               |    3 +-
 test/line-crash.html                               |  131 ++
 test/lines-bus.html                                |   17 +-
 test/loading.html                                  |   55 +-
 test/map-nameProperty.html                         |  252 +++
 test/map.html                                      |   72 +
 test/min-max-function.html                         |  117 +-
 test/pie-animation.html                            |   47 +-
 test/runTest/actions/__meta__.json                 |    4 +
 test/runTest/actions/bar-background.json           |    1 +
 test/runTest/actions/line-crash.json               |    1 +
 test/runTest/actions/pie-animation.json            |    1 +
 test/runTest/actions/treemap-action.json           |    1 +
 test/sankey-depth.html                             |   14 +-
 test/symbol3.html                                  |  105 ++
 test/toolbox-saveImage-background-svg.html         |  208 +++
 132 files changed, 11818 insertions(+), 2153 deletions(-)

diff --cc src/chart/bar/BarView.ts
index b9f86e2,336c256..2b2e7f2
--- a/src/chart/bar/BarView.ts
+++ b/src/chart/bar/BarView.ts
@@@ -26,18 -26,22 +26,28 @@@ import 
      updateProps,
      initProps,
      enableHoverEmphasis,
-     setLabelStyle
+     setLabelStyle,
 -    clearStates,
+     updateLabel,
+     initLabel
  } from '../../util/graphic';
  import Path, { PathProps } from 'zrender/src/graphic/Path';
 -import * as numberUtil from '../../util/number';
  import Group from 'zrender/src/graphic/Group';
  import {throttle} from '../../util/throttle';
  import {createClipPath} from '../helper/createClipPathFromCoordSys';
  import Sausage from '../../util/shape/sausage';
  import ChartView from '../../view/Chart';
- import List from '../../data/List';
+ import List, {DefaultDataVisual} from '../../data/List';
  import GlobalModel from '../../model/Global';
  import ExtensionAPI from '../../ExtensionAPI';
- import { StageHandlerProgressParams, ZRElementEvent, ColorString } from '../../util/types';
 -import { StageHandlerProgressParams, ZRElementEvent, ColorString, OrdinalSortInfo, Payload, OrdinalNumber, OrdinalRawValue, DisplayState, ParsedValue } from '../../util/types';
++import {
++    StageHandlerProgressParams,
++    ZRElementEvent,
++    ColorString,
++    OrdinalSortInfo,
++    Payload,
++    OrdinalNumber,
++    ParsedValue
++} from '../../util/types';
  import BarSeriesModel, { BarSeriesOption, BarDataItemOption } from './BarSeries';
  import type Axis2D from '../../coord/cartesian/Axis2D';
  import type Cartesian2D from '../../coord/cartesian/Cartesian2D';
@@@ -198,7 -272,7 +278,15 @@@ class BarView extends ChartView 
                  }
  
                  const el = elementCreator[coord.type](
-                     dataIndex, layout, isHorizontalOrRadial, animationModel, false, roundCap
 -                    seriesModel, data, dataIndex, layout, isHorizontalOrRadial, animationModel, false, getDuring(), roundCap
++                    seriesModel,
++                    data,
++                    dataIndex,
++                    layout,
++                    isHorizontalOrRadial,
++                    animationModel,
++                    false,
++                    getDuring(),
++                    roundCap
                  );
                  data.setItemGraphicEl(dataIndex, el);
                  group.add(el);
@@@ -238,13 -317,53 +331,67 @@@
                  }
  
                  if (el) {
-                     updateProps(el as Path, {
-                         shape: layout
-                     }, animationModel, newIndex);
 -                    clearStates(el);
 -
+                     if (coord.type === 'cartesian2d'
+                         && baseAxis.type === 'category' && (baseAxis as Axis2D).model.get('sort')
+                     ) {
+                         const rect = layout as RectShape;
 -                        let seriesShape, axisShape;
++                        let seriesShape;
++                        let axisShape;
+                         if (baseAxis.dim === 'x') {
+                             axisShape = {
+                                 x: rect.x,
+                                 width: rect.width
+                             };
+                             seriesShape = {
+                                 y: rect.y,
+                                 height: rect.height
+                             };
+                         }
+                         else {
+                             axisShape = {
+                                 y: rect.y,
+                                 height: rect.height
+                             };
+                             seriesShape = {
+                                 x: rect.x,
+                                 width: rect.width
+                             };
+                         }
+ 
+                         if (!isReorder) {
 -                            updateProps(el as Path, { shape: seriesShape }, animationModel, newIndex, null, getDuring());
++                            updateProps(
++                                el as Path,
++                                { shape: seriesShape },
++                                animationModel,
++                                newIndex,
++                                null,
++                                getDuring()
++                            );
+                         }
+                         updateProps(el as Path, { shape: axisShape }, axisAnimationModel, newIndex, null);
+                     }
+                     else {
+                         updateProps(el as Path, {
+                             shape: layout
+                         }, animationModel, newIndex, null);
+                     }
+ 
+                     const defaultTextGetter = (values: ParsedValue | ParsedValue[]) => {
+                         return getDefaultLabel(seriesModel.getData(), newIndex, values);
+                     };
+                     updateLabel(el, data, newIndex, labelModel, seriesModel, animationModel, defaultTextGetter);
                  }
                  else {
                      el = elementCreator[coord.type](
-                         newIndex, layout, isHorizontalOrRadial, animationModel, true, roundCap
 -                        seriesModel, data, newIndex, layout, isHorizontalOrRadial, animationModel, true, getDuring(), roundCap
++                        seriesModel,
++                        data,
++                        newIndex,
++                        layout,
++                        isHorizontalOrRadial,
++                        animationModel,
++                        true,
++                        getDuring(),
++                        roundCap
                      );
                  }
  
@@@ -415,9 -614,17 +642,19 @@@ const elementCreator: 
              const animateTarget = {} as RectShape;
              rectShape[animateProperty] = 0;
              animateTarget[animateProperty] = layout[animateProperty];
+ 
              (isUpdate ? updateProps : initProps)(rect, {
                  shape: animateTarget
-             }, animationModel, dataIndex);
+             }, animationModel, newIndex, null, during);
+ 
+             const defaultTextGetter = (values: ParsedValue | ParsedValue[]) => {
+                 return getDefaultLabel(seriesModel.getData(), newIndex, values);
+             };
+ 
+             const labelModel = seriesModel.getModel('label');
 -            (isUpdate ? updateLabel : initLabel)(rect, data, newIndex, labelModel, seriesModel, animationModel, defaultTextGetter);
++            (isUpdate ? updateLabel : initLabel)(
++                rect, data, newIndex, labelModel, seriesModel, animationModel, defaultTextGetter
++            );
          }
  
          return rect;
@@@ -450,8 -657,9 +687,9 @@@
              sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;
              animateTarget[animateProperty] = layout[animateProperty];
              (isUpdate ? updateProps : initProps)(sector, {
 -                shape: animateTarget,
 +                shape: animateTarget
-             }, animationModel, dataIndex);
+                 // __value: typeof dataValue === 'string' ? parseInt(dataValue, 10) : dataValue
+             }, animationModel);
          }
  
          return sector;
diff --cc src/chart/custom.ts
index 28de10d,d7fcccc..6fdb2e1
--- a/src/chart/custom.ts
+++ b/src/chart/custom.ts
@@@ -463,35 -1278,39 +1278,39 @@@ function makeRenderItem
       * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`,
       * it can be implemented as:
       * `api.style({stroke: api.visual('color'), fill: null})`;
+      *
+      * [Compat]: since ec5, RectText has been separated from its hosts el.
+      * so `api.style()` will only return the style from `itemStyle` but not handle `label`
+      * any more. But `series.label` config is never published in doc.
+      * We still compat it in `api.style()`. But not encourage to use it and will still not
+      * to pulish it to doc.
       * @public
-      * @param {Object} [extra]
-      * @param {number} [dataIndexInside=currDataIndexInside]
+      * @param dataIndexInside by default `currDataIndexInside`.
       */
-     function style(extra, dataIndexInside) {
+     function style(extra?: ZRStyleProps, dataIndexInside?: number): ZRStyleProps {
+         if (__DEV__) {
+             warnDeprecated('api.style', 'Please write literal style directly instead.');
+         }
+ 
          dataIndexInside == null && (dataIndexInside = currDataIndexInside);
-         updateCache(dataIndexInside);
  
-         const itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();
+         const style = data.getItemVisual(dataIndexInside, 'style');
+         const visualColor = style && style.fill;
+         const opacity = style && style.opacity;
  
-         currVisualColor != null && (itemStyle.fill = currVisualColor);
-         const opacity = data.getItemVisual(dataIndexInside, 'opacity');
+         let itemStyle = getItemStyleModel(dataIndexInside, NORMAL).getItemStyle();
+         visualColor != null && (itemStyle.fill = visualColor);
          opacity != null && (itemStyle.opacity = opacity);
  
-         const labelModel = extra
-             ? applyExtraBefore(extra, currLabelNormalModel)
-             : currLabelNormalModel;
- 
-         const textStyle = graphicUtil.createTextStyle(labelModel, null, {
-             inheritColor: currVisualColor,
-             isRectText: true
-         });
- 
-         // TODO
-         zrUtil.extend(itemStyle, textStyle);
- 
-         itemStyle.text = labelModel.getShallow('show')
-             ? zrUtil.retrieve2(
-                 customSeries.getFormattedLabel(dataIndexInside, 'normal'),
 -        const opt = {autoColor: isString(visualColor) ? visualColor : '#000'};
++        const opt = {inheritColor: isString(visualColor) ? visualColor : '#000'};
+         const labelModel = getLabelModel(dataIndexInside, NORMAL);
+         // Now that the feture of "auto adjust text fill/stroke" has been migrated to zrender
+         // since ec5, we should set `isAttached` as `false` here and make compat in
+         // `convertToEC4StyleForCustomSerise`.
+         const textStyle = graphicUtil.createTextStyle(labelModel, null, opt, false, true);
+         textStyle.text = labelModel.getShallow('show')
+             ? retrieve2(
+                 customSeries.getFormattedLabel(dataIndexInside, NORMAL),
                  getDefaultLabel(data, dataIndexInside)
              )
              : null;
diff --cc src/chart/sunburst/SunburstView.ts
index 625543b,6de104f..afdd28d
--- a/src/chart/sunburst/SunburstView.ts
+++ b/src/chart/sunburst/SunburstView.ts
@@@ -25,7 -25,10 +25,8 @@@ import SunburstSeriesModel, { SunburstS
  import GlobalModel from '../../model/Global';
  import ExtensionAPI from '../../ExtensionAPI';
  import { TreeNode } from '../../data/Tree';
 -import {windowOpen} from '../../util/format';
 -
 -
 -const ROOT_TO_NODE_ACTION = 'sunburstRootToNode';
 +import { ROOT_TO_NODE_ACTION } from './sunburstAction';
++import { windowOpen } from '../../util/format';
  
  interface DrawTreeNode extends TreeNode {
      parentNode: DrawTreeNode
diff --cc src/chart/treemap/TreemapView.ts
index db06317,5b5d5d2..cd5af6a
--- a/src/chart/treemap/TreemapView.ts
+++ b/src/chart/treemap/TreemapView.ts
@@@ -935,8 -928,11 +937,10 @@@ function renderNode
          graphic.setLabelStyle(
              rectEl, normalLabelModel, emphasisLabelModel,
              {
 -                defaultText: isShow ? defaultText : null,
 -                autoColor: visualColor,
 +                defaultText: isShow ? text : null,
-                 inheritColor: visualColor
++                inheritColor: visualColor,
+                 labelFetcher: seriesModel,
 -                labelDataIndex: thisNode.dataIndex,
 -                labelProp: upperLabelRect ? 'upperLabel' : 'label'
++                labelDataIndex: thisNode.dataIndex
              }
          );
  
diff --cc src/echarts.ts
index ba7f00e,eeca2de..ed58220
--- a/src/echarts.ts
+++ b/src/echarts.ts
@@@ -1814,7 -1801,10 +1843,10 @@@ class ECharts extends Eventful 
              });
          };
  
 -        updateZ = function (model: ComponentModel, view: ComponentView | ChartView): void {
 +        function updateZ(model: ComponentModel, view: ComponentView | ChartView): void {
+             if (model.preventAutoZ) {
+                 return;
+             }
              const z = model.get('z');
              const zlevel = model.get('zlevel');
              // Set z and zlevel
diff --cc src/model/mixin/dataFormat.ts
index 5d12795,45d205b..eacee23
--- a/src/model/mixin/dataFormat.ts
+++ b/src/model/mixin/dataFormat.ts
@@@ -17,11 -17,12 +17,19 @@@
  * under the License.
  */
  
+ import * as zrUtil from 'zrender/src/core/util';
 -import Element from 'zrender/src/Element';
  import {retrieveRawValue} from '../../data/helper/dataProvider';
  import {formatTpl} from '../../util/format';
- import { DataHost, DisplayState, TooltipRenderMode, CallbackDataParams, ColorString, ZRColor } from '../../util/types';
 -import { DataHost, DisplayState, TooltipRenderMode, CallbackDataParams, ColorString, ZRColor, OptionDataValue, ParsedValue } from '../../util/types';
++import {
++    DataHost,
++    DisplayState,
++    TooltipRenderMode,
++    CallbackDataParams,
++    ColorString,
++    ZRColor,
++    OptionDataValue
++} from '../../util/types';
  import GlobalModel from '../Global';
- import Element from 'zrender/src/Element';
  
  const DIMENSION_LABEL_REG = /\{@(.+?)\}/g;
  
@@@ -42,8 -44,8 +51,7 @@@ class DataFormatMixin 
       */
      getDataParams(
          dataIndex: number,
--        dataType?: string,
-         el?: Element // May be used in override.
 -        el?: Element, // May be used in override.
++        dataType?: string
      ): CallbackDataParams {
  
          const data = this.getData(dataType);
@@@ -95,25 -97,30 +103,31 @@@
          dataIndex: number,
          status?: DisplayState,
          dataType?: string,
 -        dimIndex?: number,
 -        labelProp?: string,
 -        // interpolateValues?: ParsedValue | ParsedValue[]
 +        labelDimIndex?: number,
-         formatter?: string | ((params: object) => string)
++        formatter?: string | ((params: object) => string),
+         extendParams?: Partial<CallbackDataParams>
      ): string {
          status = status || 'normal';
          const data = this.getData(dataType);
 -        const itemModel = data.getItemModel(dataIndex);
  
 -        const params = this.getDataParams(dataIndex, dataType, null);
 +        const params = this.getDataParams(dataIndex, dataType);
+ 
+         if (extendParams) {
+             zrUtil.extend(params, extendParams);
+         }
+ 
 -        if (dimIndex != null && (params.value instanceof Array)) {
 -            params.value = params.value[dimIndex];
 +        if (labelDimIndex != null && (params.value instanceof Array)) {
 +            params.value = params.value[labelDimIndex];
          }
  
 -        // @ts-ignore FIXME:TooltipModel
 -        const formatter = itemModel.get(status === 'normal'
 -            ? [(labelProp || 'label'), 'formatter']
 -            : [status, labelProp || 'label', 'formatter']
 -        );
 +        if (!formatter) {
 +            const itemModel = data.getItemModel(dataIndex);
 +            // @ts-ignore
 +            formatter = itemModel.get(status === 'normal'
 +                ? ['label', 'formatter']
 +                : [status, 'label', 'formatter']
 +            );
 +        }
  
          if (typeof formatter === 'function') {
              params.status = status;
diff --cc src/util/graphic.ts
index bf863ba,fe27f60..182a2b7
--- a/src/util/graphic.ts
+++ b/src/util/graphic.ts
@@@ -45,10 -43,10 +45,10 @@@ import IncrementalDisplayable from 'zre
  import * as subPixelOptimizeUtil from 'zrender/src/graphic/helper/subPixelOptimize';
  import { Dictionary } from 'zrender/src/core/types';
  import LRU from 'zrender/src/core/LRU';
 -import Displayable, { DisplayableProps } from 'zrender/src/graphic/Displayable';
 +import Displayable, { DisplayableProps, DisplayableState } from 'zrender/src/graphic/Displayable';
  import { PatternObject } from 'zrender/src/graphic/Pattern';
  import { GradientObject } from 'zrender/src/graphic/Gradient';
- import Element, { ElementEvent, ElementTextConfig } from 'zrender/src/Element';
+ import Element, { ElementEvent, ElementTextConfig, ElementProps } from 'zrender/src/Element';
  import Model from '../model/Model';
  import {
      AnimationOptionMixin,
@@@ -61,7 -59,10 +61,11 @@@
      DataModel,
      ECEventData,
      ZRStyleProps,
-     AnimationOption
++    AnimationOption,
+     TextCommonOption,
+     SeriesOption,
+     ParsedValue,
+     CallbackDataParams
  } from './types';
  import GlobalModel from '../model/Global';
  import { makeInner } from './model';
@@@ -74,8 -75,12 +78,13 @@@ import 
      isArrayLike,
      map,
      defaults,
-     indexOf
++    indexOf,
+     isObject
  } from 'zrender/src/core/util';
+ import * as numberUtil from './number';
+ import SeriesModel from '../model/Series';
+ import {interpolateNumber} from 'zrender/src/animation/Animator';
+ import List from '../data/List';
  
  
  const mathMax = Math.max;
@@@ -122,13 -121,13 +124,11 @@@ type TextCommonParams = 
       */
      disableBox?: boolean
      /**
 -     * Specify a color when color is 'auto',
 -     * for textFill, textStroke, textBackgroundColor, and textBorderColor. If autoColor specified, it is used as default textFill.
 +     * Specify a color when color is 'inherit',
 +     * If inheritColor specified, it is used as default textFill.
       */
 -    autoColor?: ColorString
 -
 -    forceRich?: boolean
 +    inheritColor?: ColorString
  
-     getTextPosition?: (textStyleModel: Model, isEmphasis?: boolean) => string | string[] | number[]
- 
      defaultOutsidePosition?: LabelOption['position']
  
      textStyle?: ZRStyleProps
@@@ -431,61 -452,7 +431,63 @@@ export function clearStates(el: Element
      }
  }
  
 -/**
 +function elementStateProxy(this: Displayable, stateName: string): DisplayableState {
 +    let state = this.states[stateName];
 +    if (stateName === 'emphasis' && this.style) {
 +        const hasEmphasis = indexOf(this.currentStates, stateName) >= 0;
 +        if (!(this instanceof ZRText)) {
 +            const currentFill = this.style.fill;
 +            const currentStroke = this.style.stroke;
 +            if (currentFill || currentStroke) {
 +                let fromState: {fill: ColorString, stroke: ColorString};
 +                if (!hasEmphasis) {
 +                    fromState = {fill: currentFill, stroke: currentStroke};
 +                    for (let i = 0; i < this.animators.length; i++) {
 +                        const animator = this.animators[i];
 +                        if (animator.__fromStateTransition
 +                            // Dont consider the animation to emphasis state.
 +                            && animator.__fromStateTransition.indexOf('emphasis') < 0
 +                            && animator.targetName === 'style'
 +                        ) {
 +                            animator.saveFinalToTarget(fromState, ['fill', 'stroke']);
 +                        }
 +                    }
 +                }
 +
 +                state = state || {};
 +                // Apply default color lift
 +                let emphasisStyle = state.style || {};
 +                let cloned = false;
 +                if (!hasFillOrStroke(emphasisStyle.fill)) {
 +                    cloned = true;
 +                    // Not modify the original value.
 +                    state = extend({}, state);
 +                    emphasisStyle = extend({}, emphasisStyle);
 +                    // Already being applied 'emphasis'. DON'T lift color multiple times.
 +                    emphasisStyle.fill = hasEmphasis ? currentFill : liftColor(fromState.fill);
 +                }
 +                if (!hasFillOrStroke(emphasisStyle.stroke)) {
 +                    if (!cloned) {
 +                        state = extend({}, state);
 +                        emphasisStyle = extend({}, emphasisStyle);
 +                    }
 +                    emphasisStyle.stroke = hasEmphasis ? currentStroke : liftColor(fromState.stroke);
 +                }
 +
 +                state.style = emphasisStyle;
 +            }
 +        }
 +        if (state) {
-             state.z2 = this.z2 + Z2_EMPHASIS_LIFT;
++            const z2EmphasisLift = (this as ECElement).z2EmphasisLift;
++            // TODO Share with textContent?
++            state.z2 = this.z2 + z2EmphasisLift != null ? z2EmphasisLift : Z2_EMPHASIS_LIFT;
 +        }
 +    }
 +
 +    return state;
 +}
 +
 +/**FI
   * Set hover style (namely "emphasis style") of element.
   * @param el Should not be `zrender/graphic/Group`.
   */
@@@ -654,32 -605,54 +656,81 @@@ interface SetLabelStyleOpt<LDI> extend
      defaultText?: string | (
          (labelDataIndex: LDI, opt: SetLabelStyleOpt<LDI>) => string
      ),
-     // Fetch text by `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`
+     // Fetch text by:
+     // opt.labelFetcher.getFormattedLabel(
+     //     opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp
+     // )
      labelFetcher?: {
 -        getFormattedLabel?: (
 +        getFormattedLabel: (
              // In MapDraw case it can be string (region name)
              labelDataIndex: LDI,
 -            state: DisplayState,
 -            dataType: string,
 -            labelDimIndex: number,
 -            labelProp: string,
 +            status: DisplayState,
 +            dataType?: string,
 +            labelDimIndex?: number,
-             formatter?: string | ((params: object) => string)
++            formatter?: string | ((params: object) => string),
+             extendParams?: Partial<CallbackDataParams>
          ) => string
 +        // getDataParams: (labelDataIndex: LDI, dataType?: string) => object
      },
      labelDataIndex?: LDI,
      labelDimIndex?: number
  }
  
  
 -function getLabelText<LDI>(opt?: SetLabelStyleOpt<LDI>, interpolateValues?: ParsedValue | ParsedValue[]) {
 +type LabelModel = Model<LabelOption & {
 +    formatter?: string | ((params: any) => string)
 +}>;
 +type LabelModelForText = Model<Omit<
 +    // Remove
 +    LabelOption, 'position' | 'rotate'
 +> & {
 +    formatter?: string | ((params: any) => string)
 +}>;
++
++function getLabelText<LDI>(
++    opt?: SetLabelStyleOpt<LDI>,
++    normalModel: LabelModel,
++    emphasisModel: LabelModel,
++    interpolateValues?: ParsedValue | ParsedValue[]
++) {
+     const labelFetcher = opt.labelFetcher;
+     const labelDataIndex = opt.labelDataIndex;
+     const labelDimIndex = opt.labelDimIndex;
 -    const labelProp = opt.labelProp;
+ 
+     let baseText;
+     if (labelFetcher) {
 -        baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, labelProp, {
 -            value: interpolateValues
 -        });
++        baseText = labelFetcher.getFormattedLabel(
++            labelDataIndex,
++            'normal',
++            null,
++            labelDimIndex,
++            normalModel && normalModel.get('formatter'),
++            {
++                value: interpolateValues
++            }
++        );
+     }
+     if (baseText == null) {
+         baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;
+     }
+     const emphasisStyleText = retrieve2(
+         labelFetcher
 -            ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex, labelProp)
++            ? labelFetcher.getFormattedLabel(
++                labelDataIndex,
++                'emphasis',
++                null,
++                labelDimIndex,
++                emphasisModel && emphasisModel.get('formatter')
++            )
+             : null,
+         baseText
+     );
+     return {
+         normal: baseText,
+         emphasis: emphasisStyleText
+     };
+ }
+ 
  /**
   * Set normal styles and emphasis styles about text on target element
   * If target is a ZRText. It will create a new style object.
@@@ -708,33 -677,11 +759,8 @@@ function setLabelStyle<LDI>
      const showNormal = normalModel.getShallow('show');
      const showEmphasis = emphasisModel.getShallow('show');
  
 -    // Consider performance, only fetch label when necessary.
 -    // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,
 -    // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.
      let richText = isSetOnText ? targetEl as ZRText : null;
      if (showNormal || showEmphasis) {
-         let baseText;
-         if (labelFetcher) {
-             baseText = labelFetcher.getFormattedLabel(
-                 labelDataIndex, 'normal', null, labelDimIndex,
-                 normalModel.get('formatter')
-             );
-         }
-         if (baseText == null) {
-             baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;
-         }
-         const normalStyleText = baseText;
-         const emphasisStyleText = retrieve2(
-             labelFetcher
-                 ? labelFetcher.getFormattedLabel(
-                     labelDataIndex, 'emphasis', null, labelDimIndex,
-                     emphasisModel.get('formatter')
-                 )
-                 : null,
-             baseText
-         );
- 
          if (!isSetOnText) {
              // Reuse the previous
              richText = targetEl.getTextContent();
@@@ -785,8 -738,9 +811,9 @@@
          // auto slient is those cases.
          richText.silent = !!normalModel.getShallow('silent');
  
-         normalStyle.text = normalStyleText;
-         emphasisState.style.text = emphasisStyleText;
 -        const labelText = getLabelText(opt);
++        const labelText = getLabelText(opt, normalModel, emphasisModel);
+         normalStyle.text = labelText.normal;
+         emphasisState.style.text = labelText.emphasis;
  
          // Keep x and y
          if (richText.style.x != null) {
@@@ -831,9 -784,10 +858,10 @@@ export function createTextStyle
  export function createTextConfig(
      textStyle: TextStyleProps,
      textStyleModel: Model,
-     opt?: Pick<TextCommonParams, 'getTextPosition' | 'defaultOutsidePosition' | 'inheritColor'>,
 -    opt: TextCommonParams,
 -    isEmphasis: boolean
++    opt?: Pick<TextCommonParams, 'defaultOutsidePosition' | 'inheritColor'>,
 +    isNotNormal?: boolean
  ) {
+     opt = opt || {};
      const textConfig: ElementTextConfig = {};
      let labelPosition;
      let labelRotate = textStyleModel.getShallow('rotate');
@@@ -842,16 -796,11 +870,11 @@@
      );
      const labelOffset = textStyleModel.getShallow('offset');
  
-     if (opt.getTextPosition) {
-         labelPosition = opt.getTextPosition(textStyleModel, isNotNormal);
-     }
-     else {
-         labelPosition = textStyleModel.getShallow('position')
-             || (isNotNormal ? null : 'inside');
-         // 'outside' is not a valid zr textPostion value, but used
-         // in bar series, and magic type should be considered.
-         labelPosition === 'outside' && (labelPosition = opt.defaultOutsidePosition || 'top');
-     }
+     labelPosition = textStyleModel.getShallow('position')
 -        || (isEmphasis ? null : 'inside');
++        || (isNotNormal ? null : 'inside');
+     // 'outside' is not a valid zr textPostion value, but used
+     // in bar series, and magric type should be considered.
+     labelPosition === 'outside' && (labelPosition = opt.defaultOutsidePosition || 'top');
  
      if (labelPosition != null) {
          textConfig.position = labelPosition;
@@@ -1144,15 -1116,26 +1186,27 @@@ function animateOrSetProps<Props>
          }
  
          duration > 0
-             ? el.animateTo(props, {
-                 duration,
-                 delay: animationDelay || 0,
-                 easing: animationEasing,
-                 done: cb,
-                 setToFinal: true,
-                 force: !!cb
-             })
-             : (el.stopAnimation(), el.attr(props), cb && cb());
+             ? (
+                 isFrom
+                     ? el.animateFrom(props, {
+                         duration,
+                         delay: animationDelay || 0,
+                         easing: animationEasing,
+                         done: cb,
+                         force: !!cb || !!during,
+                         during: during
+                     })
+                     : el.animateTo(props, {
+                         duration,
+                         delay: animationDelay || 0,
+                         easing: animationEasing,
+                         done: cb,
+                         force: !!cb || !!during,
++                        setToFinal: true,
+                         during: during
+                     })
+             )
+             : (el.stopAnimation(), el.attr(props), cb && (cb as AnimateOrSetPropsOption['cb'])());
      }
      else {
          el.stopAnimation();
@@@ -1202,10 -1186,108 +1257,108 @@@ export function initProps<Props>
      el: Element<Props>,
      props: Props,
      animatableModel?: Model<AnimationOptionMixin>,
-     dataIndex?: number | (() => void),
-     cb?: () => void
+     dataIndex?: AnimateOrSetPropsOption['dataIndex'] | AnimateOrSetPropsOption['cb'] | AnimateOrSetPropsOption,
+     cb?: AnimateOrSetPropsOption['cb'] | AnimateOrSetPropsOption['during'],
+     during?: AnimateOrSetPropsOption['during']
+ ) {
+     animateOrSetProps(false, el, props, animatableModel, dataIndex, cb, during);
+ }
+ 
+ function animateOrSetLabel<Props extends PathProps>(
+     isUpdate: boolean,
+     el: Element<Props>,
+     data: List,
+     dataIndex: number,
+     labelModel: Model<LabelOption>,
+     seriesModel: SeriesModel,
+     animatableModel?: Model<AnimationOptionMixin>,
+     defaultTextGetter?: (value: ParsedValue[] | ParsedValue) => string
+ ) {
+     const element = el as Element<Props> & { __value: ParsedValue[] | ParsedValue };
+     const valueAnimationEnabled = labelModel && labelModel.get('valueAnimation');
+     if (valueAnimationEnabled) {
+         const precisionOption = labelModel.get('precision');
+         let precision: number = precisionOption === 'auto' ? 0 : precisionOption;
+ 
+         let interpolateValues: (number | string)[] | (number | string);
+         const rawValues = seriesModel.getRawValue(dataIndex);
+         let isRawValueNumber = false;
+         if (typeof rawValues === 'number') {
+             isRawValueNumber = true;
+             interpolateValues = rawValues;
+         }
+         else {
+             interpolateValues = [];
+             for (let i = 0; i < (rawValues as []).length; ++i) {
+                 const info = data.getDimensionInfo(i);
+                 if (info.type !== 'ordinal') {
+                     interpolateValues.push((rawValues as [])[i]);
+                 }
+             }
+         }
+ 
+         const during = (percent: number) => {
+             let interpolated;
+             if (isRawValueNumber) {
+                 const value = interpolateNumber(0, interpolateValues as number, percent);
+                 interpolated = numberUtil.round(value, precision);
+             }
+             else {
+                 interpolated = [];
+                 for (let i = 0, j = 0; i < (rawValues as []).length; ++i) {
+                     const info = data.getDimensionInfo(i);
+                     // Don't interpolate ordinal dims
+                     if (info.type === 'ordinal') {
+                         interpolated[i] = (rawValues as [])[i];
+                     }
+                     else {
+                         const value = interpolateNumber(0, (interpolateValues as number[])[i], percent);
+                         interpolated[i] = numberUtil.round(value), precision;
+                         ++j;
+                     }
+                 }
+             }
+             const text = el.getTextContent();
+             if (text) {
+                 const labelText = getLabelText({
+                     labelDataIndex: dataIndex,
+                     labelFetcher: seriesModel,
+                     defaultText: defaultTextGetter
+                         ? defaultTextGetter(interpolated)
+                         : interpolated + ''
 -                }, interpolated);
++                }, labelModel, null, interpolated);
+                 text.style.text = labelText.normal;
+                 text.dirty();
+             }
+         };
+ 
+         const props: ElementProps = {};
+         animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, null, during);
+     }
+ }
+ 
+ export function updateLabel<Props>(
+     el: Element<Props>,
+     data: List,
+     dataIndex: number,
+     labelModel: Model<LabelOption>,
+     seriesModel: SeriesModel,
+     animatableModel?: Model<AnimationOptionMixin>,
+     defaultTextGetter?: (value: ParsedValue[] | ParsedValue) => string
+ ) {
+     animateOrSetLabel(true, el, data, dataIndex, labelModel, seriesModel, animatableModel, defaultTextGetter);
+ }
+ 
+ export function initLabel<Props>(
+     el: Element<Props>,
+     data: List,
+     dataIndex: number,
+     labelModel: Model<LabelOption>,
+     seriesModel: SeriesModel,
+     animatableModel?: Model<AnimationOptionMixin>,
+     defaultTextGetter?: (value: ParsedValue[] | ParsedValue) => string
  ) {
-     animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);
+     animateOrSetLabel(false, el, data, dataIndex, labelModel, seriesModel, animatableModel, defaultTextGetter);
  }
  
  /**
diff --cc src/util/types.ts
index e4f508e,50b7f7c..a739352
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@@ -106,9 -106,7 +106,10 @@@ export interface ECElement extends Elem
      };
      highDownSilentOnTouch?: boolean;
      onStateChange?: (fromState: 'normal' | 'emphasis', toState: 'normal' | 'emphasis') => void;
 +
 +    highlighted?: boolean;
 +    selected?: boolean;
+     z2EmphasisLift?: number;
  }
  
  export interface DataHost {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org