Skip to content

Commit ab98007

Browse files
Scatter extra name (pyecharts#652)
* Docs: 文档完善 * Add: pyecharts#651 为 Scatter 图新增 extra_name 参数 * Update: 版本号更新 * Add: 新增 assert 判断
1 parent 1d52168 commit ab98007

File tree

6 files changed

+125
-15
lines changed

6 files changed

+125
-15
lines changed

docs/zh-cn/changelog.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# 版本日志
22

3-
* ### version 0.5.6 - 2018.7.28(dev)
4-
* TODO
3+
* ### version 0.5.7(dev)
4+
5+
#### Added
6+
* [issue#651](https://github.com/pyecharts/pyecharts/issues/651) Scatter 图新增 `extra_name` 参数,额外的数据项的名称,可以为每个数据点指定一个名称。
57

68
* ### version 0.5.6 - 2018.7.28(current)
79

docs/zh-cn/charts.md

+68-7
Original file line numberDiff line numberDiff line change
@@ -256,18 +256,18 @@
256256
默认控制第一个 y 轴,如没特殊需求无须显示指定。单个为 int 类型而控制多个为 list 类型,如 [0, 1] 表示控制第一个和第二个 x 轴。
257257

258258
额外的 dataZoom 控制条
259-
* is_datazoom_extrashow -> bool
259+
* is_datazoom_extrashow -> bool
260260
是否使用额外区域缩放组件,默认为 False
261-
* datazoom_extra_type -> str
261+
* datazoom_extra_type -> str
262262
额外区域缩放组件类型,默认为'slider',有'slider', 'inside', 'both'可选
263-
* datazoom_extra_range -> list
263+
* datazoom_extra_range -> list
264264
额外区域缩放的范围,默认为[50, 100]
265-
* datazoom_extra_orient -> str
265+
* datazoom_extra_orient -> str
266266
额外 datazoom 组件在直角坐标系中的方向,默认为 'vertical',效果显示在 y 轴。如若设置为 'horizontal' 的话效果显示在 x 轴。
267-
* datazoom_extra_xaxis_index -> int/list
267+
* datazoom_extra_xaxis_index -> int/list
268268
额外 datazoom 组件控制的 x 轴索引
269269
默认控制第一个 x 轴,如没特殊需求无须显示指定。单个为 int 类型而控制多个为 list 类型,如 [0, 1] 表示控制第一个和第二个 x 轴。
270-
* datazoom_extra_yaxis_index -> int/list
270+
* datazoom_extra_yaxis_index -> int/list
271271
额外 datazoom 组件控制的 y 轴索引
272272
默认控制第一个 y 轴,如没特殊需求无须显示指定。单个为 int 类型而控制多个为 list 类型,如 [0, 1] 表示控制第一个和第二个 x 轴。
273273

@@ -2600,8 +2600,10 @@ add(name, x_axis, y_axis,
26002600
x 坐标轴数据
26012601
* y_axis -> list
26022602
y 坐标轴数据
2603-
* extra_data -> int
2603+
* extra_data -> list[int]
26042604
第三维度数据,x 轴为第一个维度,y 轴为第二个维度。(可在 visualmap 中将视图元素映射到第三维度)
2605+
* extra_name -> list[str]
2606+
额外的数据项的名称,可以为每个数据点指定一个名称。
26052607
* symbol_size -> int
26062608
标记图形大小,默认为 10
26072609

@@ -2672,6 +2674,39 @@ sc.render()
26722674
```
26732675
![scatter-demo](https://user-images.githubusercontent.com/19553554/35090364-63f2ef78-fc74-11e7-950b-75ebd13e1f03.gif)
26742676

2677+
**为每个坐标点指定一个名称,可用于 tooltip 展示**
2678+
```python
2679+
2680+
def custom_formatter(params):
2681+
return params.value[3]
2682+
2683+
data = [
2684+
[28604, 77, 17096],
2685+
[31163, 77.4, 27662],
2686+
[1516, 68, 11546],
2687+
]
2688+
x_lst = [v[0] for v in data]
2689+
y_lst = [v[1] for v in data]
2690+
extra_data = [v[2] for v in data]
2691+
extra_name = ["point A", "point B", "point C"]
2692+
sc = Scatter()
2693+
sc.add(
2694+
"scatter",
2695+
x_lst,
2696+
y_lst,
2697+
extra_data=extra_data,
2698+
extra_name=extra_name,
2699+
is_visualmap=True,
2700+
visual_dimension=2,
2701+
visual_orient="horizontal",
2702+
visual_type="size",
2703+
visual_range=[17000, 28000],
2704+
visual_text_color="#000",
2705+
tooltip_formatter=custom_formatter,
2706+
)
2707+
sc.render()
2708+
```
2709+
![scatter-demo](https://user-images.githubusercontent.com/19553554/43563684-e5e3cc34-9655-11e8-9792-0aa03a9233c6.gif)
26752710

26762711
**Note:** 请配合 通用配置项 中的 Visualmap 使用
26772712

@@ -3304,6 +3339,32 @@ grid.render()
33043339
![grid-demo](https://user-images.githubusercontent.com/19553554/35089741-cfca19bc-fc72-11e7-8c3b-2f20d054d3fc.gif)
33053340
Bar 会受 HeatMap 影响,很有趣。
33063341

3342+
**利用 Grid 解决 dataZoom 与 X 轴标签重叠问题**
3343+
```python
3344+
from pyecharts imoprt Bar, Grid
3345+
3346+
x = [
3347+
"名字很长的x轴1",
3348+
"名字很长的x轴2",
3349+
"名字很长的x轴3",
3350+
"名字很长的x轴4",
3351+
"名字很长的x轴5",
3352+
"名字很长的x轴6",
3353+
"名字很长的x轴7",
3354+
"名字很长的x轴8",
3355+
"名字很长的x轴9",
3356+
]
3357+
y = [10, 20, 30, 40, 50, 60, 70, 80, 90]
3358+
3359+
grid = Grid()
3360+
bar = Bar("利用 Grid 解决 dataZoom 与 X 轴标签重叠问题")
3361+
bar.add("", x, y, is_datazoom_show=True, xaxis_interval=0, xaxis_rotate=30)
3362+
# 把 bar 加入到 grid 中,并适当调整 grid_bottom 参数,使 bar 图整体上移
3363+
grid.add(bar, grid_bottom="25%")
3364+
grid.render()
3365+
```
3366+
![grid-demo](https://user-images.githubusercontent.com/19553554/43446550-c3756fde-94db-11e8-81fd-b7c202306858.gif)
3367+
33073368
**datazoom 组件同时控制多个图**
33083369
```python
33093370
from pyecharts import Line, Kline, Grid

pyecharts/_version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = "0.5.6"
1+
__version__ = "0.5.7"
22
__author__ = "chenjiandongx"

pyecharts/chart.py

+1
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ def add(
152152
effect_period=None,
153153
effect_scale=None,
154154
extra_data=None,
155+
extra_name=None,
155156
geo_emphasis_color=None,
156157
geo_normal_color=None,
157158
geo_cities_coords=None,

pyecharts/charts/scatter.py

+17-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,14 @@ def add(self, *args, **kwargs):
2020
self.__add(*args, **kwargs)
2121

2222
def __add(
23-
self, name, x_axis, y_axis, extra_data=None, symbol_size=10, **kwargs
23+
self,
24+
name,
25+
x_axis,
26+
y_axis,
27+
extra_data=None,
28+
extra_name=None,
29+
symbol_size=10,
30+
**kwargs
2431
):
2532
"""
2633
@@ -33,6 +40,8 @@ def __add(
3340
:param extra_data:
3441
第三维度数据,x 轴为第一个维度,y 轴为第二个维度。(可在 visualmap 中
3542
将视图元素映射到第三维度)。
43+
:param extra_name:
44+
额外的数据项的名称,可以为每个数据点指定一个名称。
3645
:param symbol_size:
3746
标记图形大小,默认为 10。
3847
:param kwargs:
@@ -47,10 +56,13 @@ def __add(
4756
self._option.update(xAxis=xaxis, yAxis=yaxis)
4857
self._option.get("legend")[0].get("data").append(name)
4958

50-
if extra_data:
51-
_data = [list(z) for z in zip(x_axis, y_axis, extra_data)]
52-
else:
53-
_data = [list(z) for z in zip(x_axis, y_axis)]
59+
zip_lst = [x_axis, y_axis]
60+
for e in (extra_data, extra_name):
61+
if e:
62+
# 确保提供的额外的数据或名称长度相同
63+
assert len(e) == len(x_axis)
64+
zip_lst.append(e)
65+
_data = [list(z) for z in zip(*zip_lst)]
5466

5567
self._option.get("series").append(
5668
{

test/test_scatter.py

+34
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,37 @@ def test_scatter_markline_coords():
107107
scatter = Scatter("散点图示例")
108108
scatter.add("A", v1, v2, mark_line_coords=[[10, 10], [30, 30]])
109109
assert '"coord": [' in scatter._repr_html_()
110+
111+
112+
def test_scatter_extra_name():
113+
114+
def custom_formatter(params):
115+
return params.value[3]
116+
117+
data = [
118+
[28604, 77, 17096],
119+
[31163, 77.4, 27662],
120+
[1516, 68, 11546],
121+
]
122+
x_lst = [v[0] for v in data]
123+
y_lst = [v[1] for v in data]
124+
extra_data = [v[2] for v in data]
125+
extra_name = ["point A", "point B", "point C"]
126+
sc = Scatter()
127+
sc.add(
128+
"scatter",
129+
x_lst,
130+
y_lst,
131+
extra_data=extra_data,
132+
extra_name=extra_name,
133+
is_visualmap=True,
134+
visual_dimension=2,
135+
visual_orient="horizontal",
136+
visual_type="size",
137+
visual_range=[17000, 28000],
138+
visual_text_color="#000",
139+
tooltip_formatter=custom_formatter,
140+
)
141+
assert "point A" in sc._repr_html_()
142+
assert "point B" in sc._repr_html_()
143+
assert "point C" in sc._repr_html_()

0 commit comments

Comments
 (0)