From 400202f41d2af7faf3f438a00e77b68f430dcb2f Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Tue, 26 Mar 2019 14:00:34 +0800 Subject: [PATCH] Add: kline example --- example/bar_example.py | 2 +- example/kline_example.py | 121 ++++++++++++++++++++++--- pyecharts/charts/basic_charts/polar.py | 12 +-- pyecharts/options/global_options.py | 5 + pyecharts/options/series_options.py | 12 ++- 5 files changed, 130 insertions(+), 22 deletions(-) diff --git a/example/bar_example.py b/example/bar_example.py index 4505e476..0f0e93ec 100644 --- a/example/bar_example.py +++ b/example/bar_example.py @@ -134,7 +134,7 @@ def bar_markline_custom() -> Bar: .set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( - data=[opts.MarkLineItem(yaxis=50, name="yAxis=50")] + data=[opts.MarkLineItem(y=50, name="yAxis=50")] ), ) ) diff --git a/example/kline_example.py b/example/kline_example.py index d323c7f8..d3954ea8 100644 --- a/example/kline_example.py +++ b/example/kline_example.py @@ -1,10 +1,11 @@ -from pyecharts.charts import Kline -from pyecharts.options import * +# coding=utf-8 +from example.commons import Collector +from pyecharts import options as opts +from pyecharts.charts import Kline, Page -kline = Kline() -kline.add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) +C = Collector() -v1 = [ +data = [ [2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [2295.35, 2346.5, 2295.35, 2345.92], @@ -38,10 +39,108 @@ v1 = [ [2255.77, 2270.28, 2253.31, 2276.22], ] -kline.add_yaxis("kline", v1) -kline.set_global_opts(xaxis_opt=AxisOpts(name="x轴"), yaxis_opt=AxisOpts(name="y轴")) -kline.render() -# self._option.get("xAxis")[0]["scale"] = True -# self._option.get("yAxis")[0]["scale"] = True -# self._option.get("yAxis")[0]["splitArea"] = {"show": True} +@C.funcs +def kline_base() -> Kline: + c = ( + Kline() + .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) + .add_yaxis("kline", data) + .set_global_opts( + yaxis_opts=opts.AxisOpts(is_scale=True), + xaxis_opts=opts.AxisOpts(is_scale=True), + title_opts=opts.TitleOpts(title="Kline-基本示例"), + ) + ) + return c + + +@C.funcs +def kline_splitarea() -> Kline: + c = ( + Kline() + .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) + .add_yaxis("kline", data) + .set_global_opts( + xaxis_opts=opts.AxisOpts(is_scale=True), + yaxis_opts=opts.AxisOpts( + is_scale=True, + splitarea_opts=opts.SplitAreaOpts( + is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) + ), + ), + title_opts=opts.TitleOpts(title="Kline-显示分割区域"), + ) + ) + return c + + +@C.funcs +def kline_datazoom_slider() -> Kline: + c = ( + Kline() + .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) + .add_yaxis("kline", data) + .set_global_opts( + xaxis_opts=opts.AxisOpts(is_scale=True), + yaxis_opts=opts.AxisOpts( + is_scale=True, + splitarea_opts=opts.SplitAreaOpts( + is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) + ), + ), + datazoom_opts=[opts.DataZoomOpts()], + title_opts=opts.TitleOpts(title="Kline-DataZoom-slider"), + ) + ) + return c + + +@C.funcs +def kline_datazoom_inside() -> Kline: + c = ( + Kline() + .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) + .add_yaxis("kline", data) + .set_global_opts( + xaxis_opts=opts.AxisOpts(is_scale=True), + yaxis_opts=opts.AxisOpts( + is_scale=True, + splitarea_opts=opts.SplitAreaOpts( + is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) + ), + ), + datazoom_opts=[opts.DataZoomOpts(type_="inside")], + title_opts=opts.TitleOpts(title="Kline-DataZoom-inside"), + ) + ) + return c + + +@C.funcs +def kline_markline() -> Kline: + c = ( + Kline() + .add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]) + .add_yaxis( + "kline", + data, + markline_opts=opts.MarkLineOpts( + data=[opts.MarkLineItem(type_="max", value_dim="close")] + ), + ) + .set_global_opts( + xaxis_opts=opts.AxisOpts(is_scale=True), + yaxis_opts=opts.AxisOpts( + is_scale=True, + splitarea_opts=opts.SplitAreaOpts( + is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) + ), + ), + title_opts=opts.TitleOpts(title="Kline-MarkLine"), + ) + ) + return c + + +Page().add(*[fn() for fn, _ in C.charts]).render() diff --git a/pyecharts/charts/basic_charts/polar.py b/pyecharts/charts/basic_charts/polar.py index b7d8addf..00696826 100644 --- a/pyecharts/charts/basic_charts/polar.py +++ b/pyecharts/charts/basic_charts/polar.py @@ -102,7 +102,7 @@ class Polar(Chart): "z": angleaxis_z_index, } - if type in ("scatter", "line"): + if type_ in ("scatter", "line"): self.options.get("series").append( { "type": type_, @@ -116,7 +116,7 @@ class Polar(Chart): } ) - elif type == "effectScatter": + elif type_ == "effectScatter": self.options.get("series").append( { "type": type_, @@ -131,17 +131,17 @@ class Polar(Chart): } ) - elif type == "barRadius": + elif type_ == "barRadius": self.options.get("series").append(bar_type_series) self.options.update(angleAxis={}) self.options.update(radiusAxis=radius_axis_opt) - elif type == "barAngle": + elif type_ == "barAngle": self.options.get("series").append(bar_type_series) self.options.update(radiusAxis={"show": is_radiusaxis_show}) self.options.update(angleAxis=angle_axis_opt) - elif type == "custom": + elif type_ == "custom": assert render_item is not None self.options.get("series").append( { @@ -153,7 +153,7 @@ class Polar(Chart): } ) - if type not in ("barAngle", "barRadius"): + if type_ not in ("barAngle", "barRadius"): self.options.update(angleAxis=angle_axis_opt) self.options.update(radiusAxis=radius_axis_opt) self.options.update(polar={}) diff --git a/pyecharts/options/global_options.py b/pyecharts/options/global_options.py index b278f85c..d6b2fa95 100644 --- a/pyecharts/options/global_options.py +++ b/pyecharts/options/global_options.py @@ -4,6 +4,7 @@ from ..globals import RenderType from ..options.series_options import ( LabelOpts, LineStyleOpts, + SplitAreaOpts, SplitLineOpts, TextStyleOpts, ) @@ -257,11 +258,14 @@ class AxisOpts: max_: Optional[Numeric] = None, type_: Optional[str] = None, name_textstyle_opts: Union[TextStyleOpts, dict, None] = None, + splitarea_opts: Union[SplitAreaOpts, dict, None] = None, splitline_opts: Union[SplitLineOpts, dict] = SplitLineOpts(), linestyle_opts: Union[LineStyleOpts, dict] = LineStyleOpts(), ): if isinstance(name_textstyle_opts, TextStyleOpts): name_textstyle_opts = name_textstyle_opts.opts + if isinstance(splitarea_opts, SplitAreaOpts): + splitarea_opts = splitarea_opts.opts if isinstance(splitline_opts, SplitLineOpts): splitline_opts = splitline_opts.opts if isinstance(linestyle_opts, LineStyleOpts): @@ -285,6 +289,7 @@ class AxisOpts: "max": max_, "type": type_, "splitLine": splitline_opts, + "splitArea": splitarea_opts, "axisLine": {"lineStyle": linestyle_opts}, } diff --git a/pyecharts/options/series_options.py b/pyecharts/options/series_options.py index 253a4fb4..4b46d478 100644 --- a/pyecharts/options/series_options.py +++ b/pyecharts/options/series_options.py @@ -140,8 +140,10 @@ class MarkLineItem: self, name: Optional[str] = None, type_: Optional[str] = None, - xaxis: Union[str, Numeric, None] = None, - yaxis: Union[str, Numeric, None] = None, + x: Union[str, Numeric, None] = None, + y: Union[str, Numeric, None] = None, + value_index: Optional[Numeric] = None, + value_dim: Optional[str] = None, coord: Optional[Sequence] = None, symbol: Optional[str] = None, symbol_size: Optional[Numeric] = None, @@ -149,8 +151,10 @@ class MarkLineItem: self.opts: dict = { "name": name, "type": type_, - "xAxis": xaxis, - "yAxis": yaxis, + "valueIndex": value_index, + "valueDim": value_dim, + "xAxis": x, + "yAxis": y, "coord": coord, "symbol": symbol, "symbolSize": symbol_size,