From d59b24db045f1e032dc885ac566562140a66e0b9 Mon Sep 17 00:00:00 2001 From: Bela Schaum Date: Thu, 14 Mar 2024 16:31:41 +0100 Subject: [PATCH 1/4] put the markers in the middle instead of the top of the positions where bars would be --- src/chart/generator/marker.cpp | 9 +++- test/e2e/test_cases/test_cases.json | 84 ++++++++++++++--------------- 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/src/chart/generator/marker.cpp b/src/chart/generator/marker.cpp index e01655dc3..fe8c20878 100644 --- a/src/chart/generator/marker.cpp +++ b/src/chart/generator/marker.cpp @@ -64,6 +64,9 @@ Marker::Marker(const Options &options, } auto horizontal = options.isHorizontal(); + bool lineOrCircle = options.geometry == ShapeType::line + || options.geometry == ShapeType::circle; + position.x = size.x = getValueForChannel(channels, ChannelId::x, data, @@ -71,7 +74,8 @@ Marker::Marker(const Options &options, options.subAxisOf(ChannelId::x), !horizontal && stackInhibitingShape); - spacing.x = (horizontal && options.getChannels().anyAxisSet() + spacing.x = ((horizontal || lineOrCircle) + && options.getChannels().anyAxisSet() && channels.at(ChannelId::x).isDimension()) ? 1 : 0; @@ -83,7 +87,8 @@ Marker::Marker(const Options &options, options.subAxisOf(ChannelId::y), horizontal && stackInhibitingShape); - spacing.y = (!horizontal && options.getChannels().anyAxisSet() + spacing.y = ((!horizontal || lineOrCircle) + && options.getChannels().anyAxisSet() && channels.at(ChannelId::y).isDimension()) ? 1 : 0; diff --git a/test/e2e/test_cases/test_cases.json b/test/e2e/test_cases/test_cases.json index 8090ca7c1..b80bd4d61 100644 --- a/test/e2e/test_cases/test_cases.json +++ b/test/e2e/test_cases/test_cases.json @@ -551,7 +551,7 @@ "refs": ["17b70ff"] }, "web_content/analytical_operations/distribute/newmeasure_dotplot_1": { - "refs": ["477b699"] + "refs": ["f7f0e10"] }, "web_content/analytical_operations/distribute/newmeasure_dotplot_2": { "refs": ["7d277a4"] @@ -1139,16 +1139,16 @@ "refs": ["d01b016"] }, "ww_animTiming/descartes-polar_orient/05_d-p_o_r-c-r": { - "refs": ["bf1adce"] + "refs": ["b34204e"] }, "ww_animTiming/descartes-polar_orient/06_d-p_o_c-c-c": { - "refs": ["9104d61"] + "refs": ["4886c8a"] }, "ww_animTiming/descartes-polar_orient/07_d-p_o_a-c-a": { - "refs": ["234adf8"] + "refs": ["65dce6d"] }, "ww_animTiming/descartes-polar_orient/08_d-p_o_l-c-l": { - "refs": ["8d4083d"] + "refs": ["f322c16"] }, "ww_animTiming/descartes-polar_orient/09_d-p_o_r-a-r": { "refs": ["490574c"] @@ -1214,16 +1214,16 @@ "refs": ["0463407"] }, "ww_animTiming/descartes_orientation/05_d-d_o_r-c-r": { - "refs": ["e54cc3c"] + "refs": ["f6b3bbf"] }, "ww_animTiming/descartes_orientation/06_d-d_o_c-c-c": { - "refs": ["e61f19f"] + "refs": ["d999663"] }, "ww_animTiming/descartes_orientation/07_d-d_o_a-c-a": { - "refs": ["dfce038"] + "refs": ["af2ce41"] }, "ww_animTiming/descartes_orientation/08_d-d_o_l-c-l": { - "refs": ["34f8fd2"] + "refs": ["fff1d32"] }, "ww_animTiming/descartes_orientation/09_d-d_o_r-a-r": { "refs": ["1b7d7ea"] @@ -1280,13 +1280,13 @@ "refs": ["cb78537"] }, "ww_animTiming/polar_orientation/05_p-p_o_r-c-r": { - "refs": ["1046707"] + "refs": ["234fa7b"] }, "ww_animTiming/polar_orientation/06_p-p_o_c-c-c": { - "refs": ["5c0fa3c"] + "refs": ["5b95921"] }, "ww_animTiming/polar_orientation/07_p-p_o_a-c-a": { - "refs": ["e6265f9"] + "refs": ["9d4ecb8"] }, "ww_animTiming/polar_orientation/08_p-p_o_l-c-l": { "refs": ["8b1c6a0"] @@ -1472,16 +1472,16 @@ "refs": ["69cbcbd"] }, "ww_animTiming_TESTS/descartes-polar_orient/05_d-p_o_r-c-r": { - "refs": ["43f00a0"] + "refs": ["3c2d245"] }, "ww_animTiming_TESTS/descartes-polar_orient/06_d-p_o_c-c-c": { - "refs": ["ce69c8a"] + "refs": ["ef3e63b"] }, "ww_animTiming_TESTS/descartes-polar_orient/07_d-p_o_a-c-a": { - "refs": ["2f088e8"] + "refs": ["7301e31"] }, "ww_animTiming_TESTS/descartes-polar_orient/08_d-p_o_l-c-l": { - "refs": ["fe6cdbd"] + "refs": ["75e8880"] }, "ww_animTiming_TESTS/descartes-polar_orient/09_d-p_o_r-a-r": { "refs": ["8c26a23"] @@ -1547,16 +1547,16 @@ "refs": ["27a3d5e"] }, "ww_animTiming_TESTS/descartes_orientation/05_d-d_o_r-c-r": { - "refs": ["aabbace"] + "refs": ["c76fb8e"] }, "ww_animTiming_TESTS/descartes_orientation/06_d-d_o_c-c-c": { - "refs": ["157472c"] + "refs": ["56a9d06"] }, "ww_animTiming_TESTS/descartes_orientation/07_d-d_o_a-c-a": { - "refs": ["24fc2d2"] + "refs": ["25ad999"] }, "ww_animTiming_TESTS/descartes_orientation/08_d-d_o_l-c-l": { - "refs": ["487ae15"] + "refs": ["c7fa639"] }, "ww_animTiming_TESTS/descartes_orientation/09_d-d_o_r-a-r": { "refs": ["bbfa964"] @@ -1613,13 +1613,13 @@ "refs": ["f1962c6"] }, "ww_animTiming_TESTS/polar_orientation/05_p-p_o_r-c-r": { - "refs": ["1f73c7e"] + "refs": ["e8814e5"] }, "ww_animTiming_TESTS/polar_orientation/06_p-p_o_c-c-c": { - "refs": ["cecccc8"] + "refs": ["1d781f5"] }, "ww_animTiming_TESTS/polar_orientation/07_p-p_o_a-c-a": { - "refs": ["6bbffdd"] + "refs": ["f61ab11"] }, "ww_animTiming_TESTS/polar_orientation/08_p-p_o_l-c-l": { "refs": ["a207e59"] @@ -1763,7 +1763,7 @@ "refs": ["705aa0e"] }, "ww_next_steps/next_steps/21_C_C_dotplot": { - "refs": ["2904e90"] + "refs": ["92eeaaa"] }, "ww_next_steps/next_steps/22_C_C": { "refs": ["87af60f"] @@ -1772,7 +1772,7 @@ "refs": ["4b54e54"] }, "ww_next_steps/next_steps/35_C_A_violin": { - "refs": ["25d77e1"] + "refs": ["2352b28"] }, "ww_next_steps/next_steps/38_C_L_line": { "refs": ["578d265"] @@ -1793,7 +1793,7 @@ "refs": ["80c5969"] }, "ww_next_steps/next_steps_Tests/21_C_C_dotplot": { - "refs": ["54295f5"] + "refs": ["483c9ec"] }, "ww_next_steps/next_steps_Tests/22_C_C": { "refs": ["81fcf00"] @@ -1871,7 +1871,7 @@ "refs": ["d5720b5"] }, "ww_next_steps/next_steps_byOperations/distribute/distribution_06": { - "refs": ["4ef6a21"] + "refs": ["c38881d"] }, "ww_next_steps/next_steps_byOperations/distribute/distribution_07": { "refs": ["f677f00"] @@ -2111,7 +2111,7 @@ "refs": ["8d48a66"] }, "ww_next_steps/next_steps_byOperations/wREGIEKBOL/NoFade_Promobol/8_06b_d-w_cir_1c": { - "refs": ["7174bcb"] + "refs": ["ee2089c"] }, "ww_next_steps/next_steps_byOperations/wREGIEKBOL/NoFade_Promobol/9_06b_d-w_rec_1c": { "refs": ["d486211"] @@ -2558,19 +2558,19 @@ "refs": ["f128aa0"] }, "ww_noFade/wNoFade_cases/1_des_pol/line/04a_lin": { - "refs": ["1a5b410"] + "refs": ["3b15914"] }, "ww_noFade/wNoFade_cases/1_des_pol/line/04b_lin": { "refs": ["0a8514e"] }, "ww_noFade/wNoFade_cases/1_des_pol/line/05a_lin": { - "refs": ["96903d3"] + "refs": ["44e1409"] }, "ww_noFade/wNoFade_cases/1_des_pol/line/05b_lin": { "refs": ["73c8dc9"] }, "ww_noFade/wNoFade_cases/1_des_pol/line/06a_lin": { - "refs": ["c9ceca8"] + "refs": ["a80440a"] }, "ww_noFade/wNoFade_cases/1_des_pol/line/06b_lin": { "refs": ["665ca53"] @@ -2777,19 +2777,19 @@ "refs": ["074f490"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line-rectangle/04a_d-w_lin": { - "refs": ["e58f156"] + "refs": ["169f45a"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line-rectangle/04b_d-w_lin": { "refs": ["561fbb9"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line-rectangle/05a_d-w_lin": { - "refs": ["a6429e4"] + "refs": ["a4f25b5"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line-rectangle/05b_d-w_lin": { "refs": ["9897763"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line-rectangle/06a_d-w_lin": { - "refs": ["9c4e8ab"] + "refs": ["939c274"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line-rectangle/06b_d-w_lin": { "refs": ["16823b3"] @@ -2801,19 +2801,19 @@ "refs": ["1b52593"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line/04a_d-w_lin": { - "refs": ["46c8ce8"] + "refs": ["ada5177"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line/04b_d-w_lin": { "refs": ["7066fed"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line/05a_d-w_lin": { - "refs": ["324aa85"] + "refs": ["bdf906f"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line/05b_d-w_lin": { "refs": ["56454e3"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line/06a_d-w_lin": { - "refs": ["e196b36"] + "refs": ["c754597"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line/06b_d-w_lin": { "refs": ["672ba90"] @@ -2825,13 +2825,13 @@ "refs": ["1124f4f"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line_V1/04a_d-w_lin_V1": { - "refs": ["c3ad3a9"] + "refs": ["4a6b422"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line_V1/04b_d-w_lin_V1": { "refs": ["0d0d4eb"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line_V1/05a_d-w_lin_V1": { - "refs": ["c8181ab"] + "refs": ["578100d"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line_V1/05b_d-w_lin_V1": { "refs": ["df70ce8"] @@ -2840,7 +2840,7 @@ "refs": ["adf156e"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/line_V1/06b_d-w_lin_V1": { - "refs": ["aa1b99e"] + "refs": ["90cefce"] }, "ww_noFade/wNoFade_cases/2_des_pol-without/rectangle/02_d-w_rec": { "refs": ["291bf66"] @@ -3038,7 +3038,7 @@ "refs": ["25c68b8"] }, "ww_samples_for_presets/cartesian_coo_sys/21_C_C_dot_plot_chart": { - "refs": ["1466b36"] + "refs": ["16af4ef"] }, "ww_samples_for_presets/cartesian_coo_sys/22_C_C_scatter_plot": { "refs": ["7a79697"] @@ -3047,7 +3047,7 @@ "refs": ["9d8d76c"] }, "ww_samples_for_presets/cartesian_coo_sys/25_C_C_correlogram": { - "refs": ["95be630"] + "refs": ["24ede3c"] }, "ww_samples_for_presets/cartesian_coo_sys/27_C_A_area_chart": { "refs": ["edba15c"] From 809fdb869a327f5055f01b42e114eb6004f0cdfe Mon Sep 17 00:00:00 2001 From: Bela Schaum Date: Thu, 14 Mar 2024 16:39:07 +0100 Subject: [PATCH 2/4] Add changelog --- CHANGELOG.md | 4 ++++ src/chart/generator/marker.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cdb596c1..1e2e0fc98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Line and circle chats with only dimensions on x, and y axes the markers were off the axis labels. + ## [0.10.1] - 2024-03-12 ### Added diff --git a/src/chart/generator/marker.cpp b/src/chart/generator/marker.cpp index fe8c20878..e40876030 100644 --- a/src/chart/generator/marker.cpp +++ b/src/chart/generator/marker.cpp @@ -64,7 +64,7 @@ Marker::Marker(const Options &options, } auto horizontal = options.isHorizontal(); - bool lineOrCircle = options.geometry == ShapeType::line + auto lineOrCircle = options.geometry == ShapeType::line || options.geometry == ShapeType::circle; position.x = size.x = getValueForChannel(channels, From 0010a11b08d32186c65fe39e8daa13122ebab48a Mon Sep 17 00:00:00 2001 From: Bela Schaum Date: Thu, 14 Mar 2024 16:50:16 +0100 Subject: [PATCH 3/4] Add test --- test/e2e/tests/fixes.json | 3 +++ test/e2e/tests/fixes/327.mjs | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 test/e2e/tests/fixes/327.mjs diff --git a/test/e2e/tests/fixes.json b/test/e2e/tests/fixes.json index f2760851f..be46914a6 100644 --- a/test/e2e/tests/fixes.json +++ b/test/e2e/tests/fixes.json @@ -19,6 +19,9 @@ "320": { "refs": ["e4b8a2f"] }, + "327": { + "refs": ["c86fed2"] + }, "333": { "refs": ["22c1f69"] }, diff --git a/test/e2e/tests/fixes/327.mjs b/test/e2e/tests/fixes/327.mjs new file mode 100644 index 000000000..099b2bbe1 --- /dev/null +++ b/test/e2e/tests/fixes/327.mjs @@ -0,0 +1,27 @@ +const testSteps = [ + (chart) => { + const data = { + series: [ + { name: 'Foo', values: ['Alice', 'Bob', 'Ted', 'Alice', 'Bob', 'Ted'] }, + { name: 'Bar', values: ['A', 'A', 'A', 'B', 'B', 'B'] }, + { name: 'Baz', values: [1, 2, 3, 6, 5, 4] } + ] + } + + return chart.animate({ data }) + }, + (chart) => + chart.animate({ + x: 'Foo', + y: 'Bar', + size: 'Baz', + geometry: 'circle' + }), + (chart) => + chart.animate({ + geometry: 'line', + orientation: 'vertical' + }) +] + +export default testSteps From 556757ff6a06e92d3efe87386c5ec58581f0b3b7 Mon Sep 17 00:00:00 2001 From: Bela Schaum Date: Thu, 14 Mar 2024 20:26:35 +0100 Subject: [PATCH 4/4] Fix polar version + add markerConnectionOrientation --- src/chart/animator/planner.cpp | 16 ++++++++++++++ src/chart/generator/marker.cpp | 29 +++++++++++++------------- src/chart/generator/marker.h | 2 +- src/chart/generator/plot.cpp | 18 +++++++++++++--- src/chart/generator/plot.h | 3 ++- test/e2e/tests/fixes.json | 2 +- test/e2e/tests/fixes/327.mjs | 38 ++++++++++++++++++++++++++++++++-- 7 files changed, 85 insertions(+), 23 deletions(-) diff --git a/src/chart/animator/planner.cpp b/src/chart/animator/planner.cpp index e89b1a09a..2fc3c02a5 100644 --- a/src/chart/animator/planner.cpp +++ b/src/chart/animator/planner.cpp @@ -410,6 +410,14 @@ bool Planner::needVertical() const != target->dimensionAxises.at( Gen::ChannelId::size))) || source->anyAxisSet != target->anyAxisSet + || (source->markerConnectionOrientation + != target->markerConnectionOrientation + && ((source->markerConnectionOrientation.value_or( + Gen::Orientation::horizontal) + == Gen::Orientation::vertical) + || (target->markerConnectionOrientation.value_or( + Gen::Orientation::horizontal) + == Gen::Orientation::vertical))) || anyMarker( [&](const auto &source, const auto &target) { @@ -434,6 +442,14 @@ bool Planner::needHorizontal() const != target->guides.at(Gen::ChannelId::x) || source->anyAxisSet != target->anyAxisSet || source->keepAspectRatio != target->keepAspectRatio + || (source->markerConnectionOrientation + != target->markerConnectionOrientation + && ((source->markerConnectionOrientation.value_or( + Gen::Orientation::vertical) + == Gen::Orientation::horizontal) + || (target->markerConnectionOrientation.value_or( + Gen::Orientation::vertical) + == Gen::Orientation::horizontal))) || anyMarker( [&](const auto &source, const auto &target) { diff --git a/src/chart/generator/marker.cpp b/src/chart/generator/marker.cpp index e40876030..7e93eae4b 100644 --- a/src/chart/generator/marker.cpp +++ b/src/chart/generator/marker.cpp @@ -66,6 +66,7 @@ Marker::Marker(const Options &options, auto horizontal = options.isHorizontal(); auto lineOrCircle = options.geometry == ShapeType::line || options.geometry == ShapeType::circle; + auto polar = options.coordSystem.get() == CoordSystem::polar; position.x = size.x = getValueForChannel(channels, ChannelId::x, @@ -74,9 +75,9 @@ Marker::Marker(const Options &options, options.subAxisOf(ChannelId::x), !horizontal && stackInhibitingShape); - spacing.x = ((horizontal || lineOrCircle) - && options.getChannels().anyAxisSet() - && channels.at(ChannelId::x).isDimension()) + spacing.x = (horizontal || (lineOrCircle && !polar)) + && options.getChannels().anyAxisSet() + && channels.at(ChannelId::x).isDimension() ? 1 : 0; @@ -87,9 +88,9 @@ Marker::Marker(const Options &options, options.subAxisOf(ChannelId::y), horizontal && stackInhibitingShape); - spacing.y = ((!horizontal || lineOrCircle) - && options.getChannels().anyAxisSet() - && channels.at(ChannelId::y).isDimension()) + spacing.y = (!horizontal || lineOrCircle) + && options.getChannels().anyAxisSet() + && channels.at(ChannelId::y).isDimension() ? 1 : 0; @@ -115,20 +116,18 @@ Marker::Marker(const Options &options, } void Marker::setNextMarker(uint64_t itemId, - Marker *marker, + Marker &marker, bool horizontal, bool main) { - if (marker) { - (main ? nextMainMarkerIdx : nextSubMarkerIdx) = marker->idx; + (main ? nextMainMarkerIdx : nextSubMarkerIdx) = marker.idx; - if (main) marker->prevMainMarkerIdx = idx; + if (main) marker.prevMainMarkerIdx = idx; - if (itemId != 0) { - double Geom::Point::*const coord = - horizontal ? &Geom::Point::x : &Geom::Point::y; - marker->position.*coord += position.*coord; - } + if (itemId != 0) { + double Geom::Point::*const coord = + horizontal ? &Geom::Point::x : &Geom::Point::y; + marker.position.*coord += position.*coord; } } diff --git a/src/chart/generator/marker.h b/src/chart/generator/marker.h index 6f05f5d15..edcf9b03c 100644 --- a/src/chart/generator/marker.h +++ b/src/chart/generator/marker.h @@ -89,7 +89,7 @@ class Marker ::Anim::Interpolated nextSubMarkerIdx; void setNextMarker(uint64_t itemId, - Marker *marker, + Marker &marker, bool horizontal, bool main); void resetSize(bool horizontal); diff --git a/src/chart/generator/plot.cpp b/src/chart/generator/plot.cpp index 6e7ce6f3d..86219c063 100644 --- a/src/chart/generator/plot.cpp +++ b/src/chart/generator/plot.cpp @@ -159,8 +159,15 @@ void Plot::generateMarkers(const Data::DataTable &table) } clearEmptyBuckets(mainBuckets, true); clearEmptyBuckets(subBuckets, false); - linkMarkers(mainBuckets, true); + auto conn = linkMarkers(mainBuckets, true); linkMarkers(subBuckets, false); + + if (conn && options->geometry.get() == ShapeType::line + && options->getChannels().at(ChannelId::x).isDimension() + && options->getChannels().at(ChannelId::y).isDimension()) { + markerConnectionOrientation.emplace( + *options->orientation.get()); + } } void Plot::generateMarkersInfo() @@ -232,10 +239,11 @@ void Plot::clearEmptyBuckets(const Buckets &buckets, bool main) } } -void Plot::linkMarkers(const Buckets &buckets, bool main) +bool Plot::linkMarkers(const Buckets &buckets, bool main) { auto sorted = sortedBuckets(buckets, main); + bool hasConnection{}; for (const auto &pair : buckets) { const auto &bucket = pair.second; @@ -246,12 +254,16 @@ void Plot::linkMarkers(const Buckets &buckets, bool main) auto iNext = (i + 1) % sorted.size(); auto idNext = sorted[iNext].first; auto indexNext = bucket.at(idNext); + auto &next = markers[indexNext]; act.setNextMarker(iNext, - &markers[indexNext], + next, options->isHorizontal() == main, main); + if (act.enabled && next.enabled && indexAct != indexNext) + hasConnection = true; } } + return hasConnection; } void Plot::normalizeXY() diff --git a/src/chart/generator/plot.h b/src/chart/generator/plot.h index beca663b9..51a0fb547 100644 --- a/src/chart/generator/plot.h +++ b/src/chart/generator/plot.h @@ -67,6 +67,7 @@ class Plot Guides guides; DimensionAxises dimensionAxises; Math::FuzzyBool keepAspectRatio; + std::optional markerConnectionOrientation; Plot(const Plot &other) = default; Plot(PlotOptionsPtr options, const Plot &other); @@ -124,7 +125,7 @@ class Plot void generateMarkers(const Data::DataTable &table); void generateMarkersInfo(); - void linkMarkers(const Buckets &buckets, bool main); + bool linkMarkers(const Buckets &buckets, bool main); void normalizeXY(); void calcMeasureAxises(const Data::DataTable &dataTable); void calcMeasureAxis(ChannelId type, diff --git a/test/e2e/tests/fixes.json b/test/e2e/tests/fixes.json index be46914a6..3b65987a9 100644 --- a/test/e2e/tests/fixes.json +++ b/test/e2e/tests/fixes.json @@ -20,7 +20,7 @@ "refs": ["e4b8a2f"] }, "327": { - "refs": ["c86fed2"] + "refs": ["e22b24c"] }, "333": { "refs": ["22c1f69"] diff --git a/test/e2e/tests/fixes/327.mjs b/test/e2e/tests/fixes/327.mjs index 099b2bbe1..37c3f9433 100644 --- a/test/e2e/tests/fixes/327.mjs +++ b/test/e2e/tests/fixes/327.mjs @@ -15,11 +15,45 @@ const testSteps = [ x: 'Foo', y: 'Bar', size: 'Baz', - geometry: 'circle' + geometry: 'line', + coordSystem: 'polar' + }), + (chart) => + chart.animate({ + orientation: 'vertical' + }), + (chart) => + chart.animate({ + geometry: 'circle', + orientation: 'horizontal' + }), + (chart) => + chart.animate( + { + orientation: 'vertical' + }, + 1 + ), + (chart) => + chart.animate( + { + geometry: 'line', + orientation: 'horizontal', + coordSystem: 'cartesian' + }, + 1 + ), + (chart) => + chart.animate({ + orientation: 'vertical' + }), + (chart) => + chart.animate({ + geometry: 'circle', + orientation: 'horizontal' }), (chart) => chart.animate({ - geometry: 'line', orientation: 'vertical' }) ]