Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
alon@wen
echarts
提交
9b9c01d0
E
echarts
项目概览
alon@wen
/
echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
echarts
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9b9c01d0
编写于
9月 28, 2015
作者:
L
lang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Pie legend
上级
5ba32706
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
498 addition
and
250 deletion
+498
-250
src/chart/bar/BarSeries.js
src/chart/bar/BarSeries.js
+2
-2
src/chart/helper/DataSymbol.js
src/chart/helper/DataSymbol.js
+4
-4
src/chart/helper/createListFromArray.js
src/chart/helper/createListFromArray.js
+120
-0
src/chart/line/LineSeries.js
src/chart/line/LineSeries.js
+2
-2
src/chart/pie.js
src/chart/pie.js
+2
-0
src/chart/pie/PieSeries.js
src/chart/pie/PieSeries.js
+56
-0
src/chart/pie/PieView.js
src/chart/pie/PieView.js
+93
-3
src/chart/pie/dataItemFilter.js
src/chart/pie/dataItemFilter.js
+7
-3
src/chart/pie/pieVisual.js
src/chart/pie/pieVisual.js
+6
-2
src/chart/scatter/ScatterSeries.js
src/chart/scatter/ScatterSeries.js
+2
-2
src/component/legend/LegendModel.js
src/component/legend/LegendModel.js
+15
-7
src/component/legend/LegendView.js
src/component/legend/LegendView.js
+84
-45
src/data/List.js
src/data/List.js
+9
-115
src/echarts.js
src/echarts.js
+1
-1
src/model/Series.js
src/model/Series.js
+19
-8
test/bar.html
test/bar.html
+22
-7
test/dataZoom-cartesian-h.html
test/dataZoom-cartesian-h.html
+14
-5
test/dataZoom-cartesian-v.html
test/dataZoom-cartesian-v.html
+4
-4
test/dataZoom-scatter-hv.html
test/dataZoom-scatter-hv.html
+27
-19
test/dynamicData.html
test/dynamicData.html
+5
-5
test/pie.html
test/pie.html
+4
-16
未找到文件。
src/chart/bar/BarSeries.js
浏览文件 @
9b9c01d0
...
...
@@ -2,8 +2,8 @@ define(function(require) {
'
use strict
'
;
var
List
=
require
(
'
../../data/List
'
);
var
SeriesModel
=
require
(
'
../../model/Series
'
);
var
createListFromArray
=
require
(
'
../helper/createListFromArray
'
);
return
SeriesModel
.
extend
({
...
...
@@ -12,7 +12,7 @@ define(function(require) {
dependencies
:
[
'
grid
'
,
'
polar
'
],
getInitialData
:
function
(
option
,
ecModel
)
{
return
List
.
f
romArray
(
option
.
data
,
this
,
ecModel
);
return
createListF
romArray
(
option
.
data
,
this
,
ecModel
);
},
defaultOption
:
{
...
...
src/chart/helper/DataSymbol.js
浏览文件 @
9b9c01d0
...
...
@@ -151,11 +151,11 @@ define(function (require) {
data
.
eachItemGraphicEl
(
function
(
el
,
idx
)
{
var
itemModel
=
data
.
getItemModel
(
idx
);
var
itemStyle
=
itemModel
.
getModel
(
'
itemStyle.normal
'
).
getItemStyle
();
// delete itemStyle.color;
// delete itemStyle.symbolSize;
zrUtil
.
extend
(
el
.
style
,
itemModel
.
getModel
(
'
itemStyle.normal
'
).
getItemStyle
([
'
color
'
])
);
zrUtil
.
extend
(
el
.
style
,
itemStyle
);
graphic
.
setHoverStyle
(
el
,
itemModel
.
getModel
(
'
itemStyle.emphasis
'
).
getItemStyle
()
...
...
src/chart/helper/createListFromArray.js
0 → 100644
浏览文件 @
9b9c01d0
define
(
function
(
require
)
{
'
use strict
'
;
var
List
=
require
(
'
../../data/List
'
);
/**
* Helper function to create a list from option data
*/
return
function
(
data
,
seriesModel
,
ecModel
)
{
var
coordinateSystem
=
seriesModel
.
get
(
'
coordinateSystem
'
);
var
dimensions
;
var
categoryAxisModel
;
// FIXME
// 这里 List 跟几个坐标系和坐标系 Model 耦合了
if
(
coordinateSystem
===
'
cartesian2d
'
)
{
var
xAxisModel
=
ecModel
.
getComponent
(
'
xAxis
'
,
seriesModel
.
get
(
'
xAxisIndex
'
));
var
yAxisModel
=
ecModel
.
getComponent
(
'
yAxis
'
,
seriesModel
.
get
(
'
yAxisIndex
'
));
if
(
xAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
x
'
,
type
:
'
int
'
},
{
name
:
'
y
'
,
stackable
:
true
}];
categoryAxisModel
=
xAxisModel
;
}
else
if
(
yAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
y
'
,
type
:
'
int
'
},
{
name
:
'
x
'
,
stackable
:
true
}];
categoryAxisModel
=
yAxisModel
;
}
else
{
// PENDING
var
dimSize
=
data
[
0
]
&&
data
[
0
].
length
;
// FIXME
var
dimensionNames
=
[
'
x
'
,
'
y
'
,
'
z
'
,
'
a
'
,
'
b
'
,
'
c
'
,
'
d
'
,
'
e
'
];
if
(
dimSize
>=
2
)
{
dimensions
=
dimensionNames
.
slice
(
0
,
dimSize
);
}
}
}
else
if
(
coordinateSystem
===
'
polar
'
)
{
var
axisFinder
=
function
(
axisModel
)
{
return
axisModel
.
get
(
'
polarIndex
'
)
===
polarIndex
;
}
var
polarIndex
=
seriesModel
.
get
(
'
polarIndex
'
)
||
0
;
var
angleAxisModel
=
ecModel
.
findComponent
(
'
angleAxis
'
,
axisFinder
);
var
radiusAxisModel
=
ecModel
.
findComponent
(
'
radiusAxis
'
,
axisFinder
);
if
(
angleAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
angle
'
,
type
:
'
int
'
},
{
name
:
'
radius
'
,
stackable
:
true
}];
categoryAxisModel
=
angleAxisModel
;
}
else
if
(
radiusAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
radius
'
,
type
:
'
int
'
},
{
name
:
'
angle
'
,
stackable
:
true
}];
categoryAxisModel
=
radiusAxisModel
;
}
else
{
// PENDING
var
dimSize
=
data
[
0
]
&&
data
[
0
].
length
;
if
(
dimSize
===
2
)
{
dimensions
=
[
'
radius
'
,
'
angle
'
];
}
else
if
(
dimSize
===
3
)
{
dimensions
=
[
'
radius
'
,
'
angle
'
,
'
value
'
];
}
}
}
var
nameList
=
[];
if
(
categoryAxisModel
)
{
var
categories
=
categoryAxisModel
.
get
(
'
data
'
);
if
(
categories
)
{
var
dataLen
=
data
.
length
;
// Ordered data is given explicitly like
// [[1, 0.2], [2, 0.3], [3, 0.15]]
// Pick the category
if
(
data
[
0
]
&&
data
[
0
].
length
>
1
&&
categories
.
length
>
dataLen
)
{
nameList
=
[];
for
(
var
i
=
0
;
i
<
dataLen
;
i
++
)
{
nameList
[
i
]
=
categories
[
data
[
i
][
0
]];
}
}
else
{
nameList
=
categories
.
slice
();
}
}
}
var
list
=
new
List
(
dimensions
,
seriesModel
);
list
.
initData
(
data
,
nameList
);
return
list
;
};
});
\ No newline at end of file
src/chart/line/LineSeries.js
浏览文件 @
9b9c01d0
...
...
@@ -2,7 +2,7 @@ define(function(require) {
'
use strict
'
;
var
List
=
require
(
'
../../data/List
'
);
var
createListFromArray
=
require
(
'
../helper/createListFromArray
'
);
var
SeriesModel
=
require
(
'
../../model/Series
'
);
return
SeriesModel
.
extend
({
...
...
@@ -12,7 +12,7 @@ define(function(require) {
dependencies
:
[
'
grid
'
,
'
polar
'
],
getInitialData
:
function
(
option
,
ecModel
)
{
return
List
.
f
romArray
(
option
.
data
,
this
,
ecModel
);
return
createListF
romArray
(
option
.
data
,
this
,
ecModel
);
},
defaultOption
:
{
...
...
src/chart/pie.js
浏览文件 @
9b9c01d0
...
...
@@ -11,4 +11,6 @@ define(function (require) {
echarts
.
registerLayout
(
zrUtil
.
curry
(
require
(
'
../layout/pie
'
),
'
pie
'
));
echarts
.
registerProcessor
(
require
(
'
./pie/dataItemFilter
'
));
});
\ No newline at end of file
src/chart/pie/PieSeries.js
浏览文件 @
9b9c01d0
...
...
@@ -4,11 +4,33 @@ define(function(require) {
var
List
=
require
(
'
../../data/List
'
);
var
SeriesModel
=
require
(
'
../../model/Series
'
);
var
zrUtil
=
require
(
'
zrender/core/util
'
);
return
SeriesModel
.
extend
({
type
:
'
series.pie
'
,
init
:
function
(
option
,
parentModel
,
ecModel
,
dependentModels
,
seriesIndex
)
{
SeriesModel
.
prototype
.
init
.
call
(
this
,
option
,
parentModel
,
ecModel
,
dependentModels
,
seriesIndex
);
// FIXME Keep selected status?
var
dataOptMap
=
{};
zrUtil
.
each
(
option
.
data
,
function
(
dataOpt
)
{
dataOptMap
[
dataOpt
.
name
]
=
dataOpt
;
});
this
.
_dataOptMap
=
dataOptMap
;
// Enable legend selection for each data item
// Use a function instead of direct access because data reference may changed
this
.
legendDataProvider
=
function
()
{
return
this
.
_dataBeforeProcessed
;
}
},
getInitialData
:
function
(
option
,
ecModel
)
{
var
list
=
new
List
([{
name
:
'
x
'
,
...
...
@@ -18,6 +40,40 @@ define(function(require) {
return
list
;
},
/**
* @param {string} name
*/
select
:
function
(
name
)
{
var
dataOpt
=
this
.
_dataOptMap
[
name
];
dataOpt
&&
(
dataOpt
.
selected
=
true
);
},
/**
* @param {string} name
*/
unSelect
:
function
(
name
)
{
var
dataOpt
=
this
.
_dataOptMap
[
name
];
dataOpt
&&
(
dataOpt
.
selected
=
false
);
},
/**
* @param {string} name
*/
toggleSelected
:
function
(
name
)
{
var
dataOpt
=
this
.
_dataOptMap
[
name
];
if
(
dataOpt
!=
null
)
{
return
dataOpt
.
selected
=
!
dataOpt
.
selected
;
}
},
/**
* @param {string} name
*/
isSelected
:
function
(
name
)
{
var
dataOpt
=
this
.
_dataOptMap
[
name
];
return
dataOpt
&&
dataOpt
.
selected
;
},
defaultOption
:
{
zlevel
:
0
,
z
:
2
,
...
...
src/chart/pie/PieView.js
浏览文件 @
9b9c01d0
...
...
@@ -3,6 +3,31 @@ define(function (require) {
var
graphic
=
require
(
'
../../util/graphic
'
);
var
zrUtil
=
require
(
'
zrender/core/util
'
);
function
selectData
(
seriesModel
)
{
var
data
=
seriesModel
.
getData
();
var
dataIndex
=
this
.
dataIndex
;
var
name
=
data
.
getName
(
dataIndex
);
updateSelected
(
this
,
seriesModel
.
toggleSelected
(
name
));
}
function
updateSelected
(
el
,
isSelected
)
{
var
shape
=
el
.
shape
;
var
midAngle
=
(
shape
.
startAngle
+
shape
.
endAngle
)
/
2
;
var
dx
=
Math
.
cos
(
midAngle
);
var
dy
=
(
shape
.
clockwise
?
1
:
-
1
)
*
Math
.
sin
(
midAngle
);
var
offset
=
isSelected
?
shape
.
r
*
0.1
:
0
;
// animateTo will stop revious animation like update transition
el
.
animate
()
.
when
(
200
,
{
position
:
[
dx
*
offset
,
dy
*
offset
]
})
.
start
(
'
bounceOut
'
);
}
var
Pie
=
require
(
'
../../view/Chart
'
).
extend
({
type
:
'
pie
'
,
...
...
@@ -11,19 +36,44 @@ define(function (require) {
var
data
=
seriesModel
.
getData
();
var
oldData
=
this
.
_data
;
var
group
=
this
.
group
;
var
hasAnimation
=
ecModel
.
get
(
'
animation
'
);
var
isFirstRender
=
!
oldData
;
var
firstSector
;
var
onSectorClick
=
zrUtil
.
curry
(
selectData
,
seriesModel
);
data
.
diff
(
oldData
)
.
add
(
function
(
idx
)
{
var
layout
=
data
.
getItemLayout
(
idx
);
var
sector
=
new
graphic
.
Sector
({
shape
:
data
.
getItemLayout
(
idx
)
shape
:
zrUtil
.
extend
({},
layout
)
});
data
.
setItemGraphicEl
(
idx
,
sector
);
if
(
hasAnimation
&&
!
isFirstRender
)
{
sector
.
shape
.
endAngle
=
layout
.
startAngle
;
sector
.
animateTo
({
shape
:
{
endAngle
:
layout
.
endAngle
}
},
300
,
'
cubicOut
'
);
}
sector
.
on
(
'
click
'
,
onSectorClick
);
data
.
setItemGraphicEl
(
idx
,
sector
);
group
.
add
(
sector
);
firstSector
=
firstSector
||
sector
;
})
.
update
(
function
(
newIdx
,
oldIdx
)
{
var
sector
=
oldData
.
getItemGraphicEl
(
oldIdx
);
sector
.
animateTo
({
shape
:
data
.
getItemLayout
(
newIdx
)
},
300
,
'
cubicOut
'
);
group
.
add
(
sector
);
data
.
setItemGraphicEl
(
newIdx
,
sector
);
})
.
remove
(
function
(
idx
)
{
var
sector
=
oldData
.
getItemGraphicEl
(
idx
);
...
...
@@ -31,8 +81,25 @@ define(function (require) {
})
.
execute
();
if
(
hasAnimation
&&
isFirstRender
&&
firstSector
)
{
var
shape
=
firstSector
.
shape
;
var
r
=
Math
.
max
(
api
.
getWidth
(),
api
.
getHeight
())
/
2
;
var
removeClipPath
=
zrUtil
.
bind
(
group
.
removeClipPath
,
group
);
group
.
setClipPath
(
this
.
_createClipPath
(
shape
.
cx
,
shape
.
cy
,
r
,
shape
.
startAngle
,
shape
.
clockwise
,
removeClipPath
));
}
this
.
_updateAll
(
data
,
seriesModel
);
this
.
_data
=
data
;
},
_updateAll
:
function
(
data
,
seriesModel
)
{
data
.
eachItemGraphicEl
(
function
(
sector
,
idx
)
{
var
itemModel
=
data
.
getItemModel
(
idx
);
sector
.
setStyle
(
zrUtil
.
extend
(
{
...
...
@@ -41,12 +108,35 @@ define(function (require) {
itemModel
.
getModel
(
'
itemStyle.normal
'
).
getItemStyle
()
)
);
graphic
.
setHoverStyle
(
sector
,
itemModel
.
getModel
(
'
itemStyle.emphasis
'
).
getItemStyle
()
);
updateSelected
(
sector
,
itemModel
.
get
(
'
selected
'
));
});
},
_createClipPath
:
function
(
cx
,
cy
,
r
,
startAngle
,
clockwise
,
cb
)
{
var
clipPath
=
new
graphic
.
Sector
({
shape
:
{
cx
:
cx
,
cy
:
cy
,
r0
:
0
,
r
:
r
,
startAngle
:
startAngle
,
endAngle
:
startAngle
,
clockwise
:
clockwise
}
});
clipPath
.
animateTo
({
shape
:
{
endAngle
:
startAngle
+
Math
.
PI
*
2
}
},
1000
,
'
cubicOut
'
,
cb
);
return
clipPath
;
},
dispose
:
function
()
{}
...
...
src/chart/pie/dataItemFilter.js
浏览文件 @
9b9c01d0
define
(
function
()
{
return
function
(
ecModel
)
{
var
legendModel
=
legendModel
.
getComponent
(
'
legend
'
);
var
legendModel
=
ecModel
.
getComponent
(
'
legend
'
);
if
(
!
legendModel
)
{
return
;
}
ecModel
.
eachSeriesByType
(
'
pie
'
,
function
(
series
)
{
series
.
getData
().
filterSelf
(
function
(
dataItem
)
{
return
legendModel
.
isSelected
(
dataItem
.
name
);
var
data
=
series
.
getData
();
data
.
filterSelf
(
function
(
idx
)
{
return
legendModel
.
isSelected
(
data
.
getName
(
idx
));
},
this
);
},
this
);
};
...
...
src/chart/pie/pieVisual.js
浏览文件 @
9b9c01d0
...
...
@@ -4,9 +4,13 @@ define(function (require) {
ecModel
.
eachSeriesByType
(
'
pie
'
,
function
(
seriesModel
)
{
var
colorList
=
ecModel
.
get
(
'
color
'
);
var
data
=
seriesModel
.
getData
();
var
dataAll
=
seriesModel
.
getDataAll
();
data
.
each
(
function
(
idx
)
{
data
.
setItemVisual
(
idx
,
'
color
'
,
colorList
[
idx
]);
var
rawIdx
=
data
.
getRawIndex
(
idx
);
var
color
=
colorList
[
rawIdx
%
colorList
.
length
];
// Legend use the visual info in data before processed
dataAll
.
setItemVisual
(
rawIdx
,
'
color
'
,
color
);
data
.
setItemVisual
(
idx
,
'
color
'
,
color
);
});
});
}
...
...
src/chart/scatter/ScatterSeries.js
浏览文件 @
9b9c01d0
...
...
@@ -2,7 +2,7 @@ define(function (require) {
'
use strict
'
;
var
List
=
require
(
'
../../data/List
'
);
var
createListFromArray
=
require
(
'
../helper/createListFromArray
'
);
var
SeriesModel
=
require
(
'
../../model/Series
'
);
return
SeriesModel
.
extend
({
...
...
@@ -12,7 +12,7 @@ define(function (require) {
dependencies
:
[
'
grid
'
,
'
polar
'
],
getInitialData
:
function
(
option
,
ecModel
)
{
var
list
=
List
.
f
romArray
(
option
.
data
,
this
,
ecModel
);
var
list
=
createListF
romArray
(
option
.
data
,
this
,
ecModel
);
// Not holding the data anymore so it can be removed in momory
// PENDING
option
.
data
=
null
;
...
...
src/component/legend/LegendModel.js
浏览文件 @
9b9c01d0
...
...
@@ -9,7 +9,7 @@ define(function(require) {
type
:
'
legend
'
,
//
dependencies: ['series'],
dependencies
:
[
'
series
'
],
init
:
function
(
option
,
parentModel
,
ecModel
)
{
this
.
mergeDefaultAndTheme
(
option
,
ecModel
);
...
...
@@ -25,13 +25,20 @@ define(function(require) {
return
new
Model
(
dataItem
,
this
);
},
this
);
var
availableNames
=
zrUtil
.
map
(
ecModel
.
getSeriesAll
(),
function
(
series
)
{
return
series
.
name
;
});
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
if
(
seriesModel
.
legendDataProvider
)
{
var
data
=
seriesModel
.
legendDataProvider
();
availableNames
=
availableNames
.
concat
(
data
.
map
(
data
.
getName
));
}
});
/**
* @type {Array.<string>}
* @private
*/
// this._seriesNames = zrUtil.map(ecModel.getSeriesAll(), function (series) {
// return series.name;
// });
this
.
_availableNames
=
availableNames
;
},
/**
...
...
@@ -60,7 +67,8 @@ define(function(require) {
*/
toggleSelected
:
function
(
name
)
{
var
selected
=
this
.
option
.
selected
;
if
(
!
(
name
in
selected
))
{
// Default is true
if
(
!
(
name
in
selected
))
{
selected
[
name
]
=
true
;
}
selected
[
name
]
=
!
selected
[
name
];
...
...
@@ -71,8 +79,8 @@ define(function(require) {
*/
isSelected
:
function
(
name
)
{
var
selected
=
this
.
option
.
selected
;
return
!
((
name
in
selected
)
&&
!
selected
[
name
])
;
// && this._seriesNames.indexOf(name) >= 0
return
!
((
name
in
selected
)
&&
!
selected
[
name
])
&&
this
.
_availableNames
.
indexOf
(
name
)
>=
0
;
},
defaultOption
:
{
...
...
src/component/legend/LegendView.js
浏览文件 @
9b9c01d0
...
...
@@ -25,13 +25,14 @@ define(function (require) {
},
render
:
function
(
legendModel
,
ecModel
,
api
)
{
var
enableSelect
=
legendModel
.
get
(
'
selectedMode
'
);
var
selectMode
=
legendModel
.
get
(
'
selectedMode
'
);
var
itemWidth
=
legendModel
.
get
(
'
itemWidth
'
);
var
itemHeight
=
legendModel
.
get
(
'
itemHeight
'
);
var
itemAlign
=
legendModel
.
get
(
'
align
'
);
var
group
=
this
.
group
;
var
x
=
legendModel
.
get
(
'
x
'
);
var
y
=
legendModel
.
get
(
'
y
'
);
var
itemAlign
=
legendModel
.
get
(
'
align
'
);
var
parsePercent
=
numberUtil
.
parsePercent
;
group
.
position
=
[
parsePercent
(
x
,
api
.
getWidth
()),
...
...
@@ -43,9 +44,13 @@ define(function (require) {
itemAlign
=
group
.
position
[
0
]
/
api
.
getWidth
()
<
0.7
?
'
left
'
:
'
right
'
;
}
var
legendDataMap
=
{};
zrUtil
.
each
(
legendModel
.
getData
(),
function
(
itemModel
)
{
var
seriesName
=
itemModel
.
get
(
'
name
'
);
var
seriesModel
=
ecModel
.
getSeriesByName
(
seriesName
,
true
);
legendDataMap
[
seriesName
]
=
true
;
if
(
!
seriesModel
)
{
// Series not exists
return
;
...
...
@@ -58,33 +63,42 @@ define(function (require) {
color
=
LEGEND_DISABLE_COLOR
;
}
var
itemGroup
=
new
graphic
.
Group
();
this
.
_createSymbol
(
data
,
0
,
0
,
itemWidth
,
itemHeight
,
color
,
itemGroup
// Using rect symbol defaultly
var
legendSymbolType
=
data
.
getVisual
(
'
legendSymbol
'
)
||
'
roundRect
'
;
var
symbolType
=
data
.
getVisual
(
'
symbol
'
);
this
.
_createItem
(
seriesName
,
legendSymbolType
,
symbolType
,
itemWidth
,
itemHeight
,
itemAlign
,
color
,
selectMode
,
api
);
},
this
);
var
textX
=
itemAlign
===
'
left
'
?
itemWidth
+
5
:
-
5
;
var
textAlign
=
itemAlign
;
ecModel
.
eachSeries
(
function
(
seriesModel
)
{
if
(
seriesModel
.
legendDataProvider
)
{
var
data
=
seriesModel
.
legendDataProvider
();
data
.
each
(
function
(
idx
)
{
var
name
=
data
.
getName
(
idx
);
var
text
=
new
graphic
.
Text
({
style
:
{
text
:
seriesName
,
x
:
textX
,
y
:
itemHeight
/
2
,
fill
:
'
#000
'
,
textAlign
:
textAlign
,
textBaseline
:
'
middle
'
}
});
itemGroup
.
add
(
text
);
if
(
!
legendDataMap
[
name
])
{
return
;
}
itemGroup
.
eachChild
(
function
(
child
)
{
child
.
silent
=
!
enableSelect
;
});
var
color
=
data
.
getItemVisual
(
idx
,
'
color
'
);
group
.
add
(
itemGroup
);
if
(
!
legendModel
.
isSelected
(
name
))
{
color
=
LEGEND_DISABLE_COLOR
;
}
itemGroup
.
on
(
'
click
'
,
zrUtil
.
curry
(
createSelectActionDispatcher
,
this
.
uid
,
seriesName
,
api
),
this
);
var
legendSymbolType
=
'
roundRect
'
;
this
.
_createItem
(
name
,
legendSymbolType
,
null
,
itemWidth
,
itemHeight
,
itemAlign
,
color
,
selectMode
,
api
);
},
false
,
this
);
}
},
this
);
legendLayout
(
group
,
legendModel
);
...
...
@@ -92,6 +106,53 @@ define(function (require) {
this
.
_adjustGroupPosition
(
group
,
x
,
y
);
},
_createItem
:
function
(
name
,
legendSymbolType
,
symbolType
,
itemWidth
,
itemHeight
,
itemAlign
,
color
,
selectMode
,
api
)
{
var
itemGroup
=
new
graphic
.
Group
();
legendSymbolType
=
legendSymbolType
;
itemGroup
.
add
(
symbolCreator
.
createSymbol
(
legendSymbolType
,
0
,
0
,
itemWidth
,
itemHeight
,
color
));
// Compose symbols
if
(
symbolType
&&
symbolType
!==
legendSymbolType
&&
symbolType
!=
'
none
'
)
{
var
size
=
itemHeight
*
0.8
;
// Put symbol in the center
itemGroup
.
add
(
symbolCreator
.
createSymbol
(
symbolType
,
(
itemWidth
-
size
)
/
2
,
(
itemHeight
-
size
)
/
2
,
size
,
size
,
color
));
}
// Text
var
textX
=
itemAlign
===
'
left
'
?
itemWidth
+
5
:
-
5
;
var
textAlign
=
itemAlign
;
var
text
=
new
graphic
.
Text
({
style
:
{
text
:
name
,
x
:
textX
,
y
:
itemHeight
/
2
,
fill
:
'
#000
'
,
textAlign
:
textAlign
,
textBaseline
:
'
middle
'
}
});
itemGroup
.
add
(
text
);
itemGroup
.
eachChild
(
function
(
child
)
{
child
.
silent
=
!
selectMode
;
});
this
.
group
.
add
(
itemGroup
);
itemGroup
.
on
(
'
click
'
,
zrUtil
.
curry
(
createSelectActionDispatcher
,
this
.
uid
,
name
,
api
),
this
);
},
_adjustGroupPosition
:
function
(
group
,
x
,
y
)
{
var
groupRect
=
group
.
getBoundingRect
();
...
...
@@ -114,28 +175,6 @@ define(function (require) {
position
[
0
]
-=
groupRect
.
height
+
groupRect
.
y
+
padding
[
2
];
break
;
}
},
_createSymbol
:
function
(
data
,
x
,
y
,
width
,
height
,
color
,
group
)
{
// Using rect symbol defaultly
var
legendSymbolType
=
data
&&
data
.
getVisual
(
'
legendSymbol
'
)
||
'
roundRect
'
;
var
symbolType
=
data
&&
data
.
getVisual
(
'
symbol
'
);
group
.
add
(
symbolCreator
.
createSymbol
(
legendSymbolType
,
x
,
y
,
width
,
height
,
color
));
// Compose symbols
if
(
symbolType
&&
symbolType
!==
legendSymbolType
&&
symbolType
!=
'
none
'
)
{
var
size
=
height
*
0.8
;
// Put symbol in the center
group
.
add
(
symbolCreator
.
createSymbol
(
symbolType
,
x
+
(
width
-
size
)
/
2
,
y
+
(
height
-
size
)
/
2
,
size
,
size
,
color
));
}
return
group
;
}
});
});
\ No newline at end of file
src/data/List.js
浏览文件 @
9b9c01d0
...
...
@@ -471,6 +471,13 @@ define(function (require) {
* @param {*} [context=this]
*/
listProto
.
filterSelf
=
function
(
dimensions
,
cb
,
stack
,
context
)
{
if
(
typeof
dimensions
===
'
function
'
)
{
context
=
stack
;
stack
=
cb
;
cb
=
dimensions
;
dimensions
=
[];
}
dimensions
=
normalizeDimensions
(
dimensions
);
var
newIndices
=
[];
...
...
@@ -539,6 +546,7 @@ define(function (require) {
*
* @param {number} idx
*/
// FIXME Model proxy ?
listProto
.
getItemModel
=
function
(
idx
)
{
var
storage
=
this
.
_storage
;
var
optionModelIndices
=
storage
.
$optionModelIndices
;
...
...
@@ -546,7 +554,7 @@ define(function (require) {
var
model
=
this
.
_optionModels
[
modelIndex
];
if
(
!
model
)
{
if
(
!
model
)
{
// Use a temporary model proxy if value on idx is not an option.
// FIXME Create a new one may cause memory leak
model
=
temporaryModel
;
...
...
@@ -717,119 +725,5 @@ define(function (require) {
return
list
;
};
/**
* Helper function to create a list from option data
*/
List
.
fromArray
=
function
(
data
,
seriesModel
,
ecModel
)
{
var
coordinateSystem
=
seriesModel
.
get
(
'
coordinateSystem
'
);
var
dimensions
;
var
categoryAxisModel
;
// FIXME
// 这里 List 跟几个坐标系和坐标系 Model 耦合了
if
(
coordinateSystem
===
'
cartesian2d
'
)
{
var
xAxisModel
=
ecModel
.
getComponent
(
'
xAxis
'
,
seriesModel
.
get
(
'
xAxisIndex
'
));
var
yAxisModel
=
ecModel
.
getComponent
(
'
yAxis
'
,
seriesModel
.
get
(
'
yAxisIndex
'
));
if
(
xAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
x
'
,
type
:
'
int
'
},
{
name
:
'
y
'
,
stackable
:
true
}];
categoryAxisModel
=
xAxisModel
;
}
else
if
(
yAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
y
'
,
type
:
'
int
'
},
{
name
:
'
x
'
,
stackable
:
true
}];
categoryAxisModel
=
yAxisModel
;
}
else
{
// PENDING
var
dimSize
=
data
[
0
]
&&
data
[
0
].
length
;
// FIXME
var
dimensionNames
=
[
'
x
'
,
'
y
'
,
'
z
'
,
'
a
'
,
'
b
'
,
'
c
'
,
'
d
'
,
'
e
'
];
if
(
dimSize
>=
2
)
{
dimensions
=
dimensionNames
.
slice
(
0
,
dimSize
);
}
}
}
else
if
(
coordinateSystem
===
'
polar
'
)
{
var
axisFinder
=
function
(
axisModel
)
{
return
axisModel
.
get
(
'
polarIndex
'
)
===
polarIndex
;
}
var
polarIndex
=
seriesModel
.
get
(
'
polarIndex
'
)
||
0
;
var
angleAxisModel
=
ecModel
.
findComponent
(
'
angleAxis
'
,
axisFinder
);
var
radiusAxisModel
=
ecModel
.
findComponent
(
'
radiusAxis
'
,
axisFinder
);
if
(
angleAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
angle
'
,
type
:
'
int
'
},
{
name
:
'
radius
'
,
stackable
:
true
}];
categoryAxisModel
=
angleAxisModel
;
}
else
if
(
radiusAxisModel
.
get
(
'
type
'
)
===
'
category
'
)
{
dimensions
=
[{
name
:
'
radius
'
,
type
:
'
int
'
},
{
name
:
'
angle
'
,
stackable
:
true
}];
categoryAxisModel
=
radiusAxisModel
;
}
else
{
// PENDING
var
dimSize
=
data
[
0
]
&&
data
[
0
].
length
;
if
(
dimSize
===
2
)
{
dimensions
=
[
'
radius
'
,
'
angle
'
];
}
else
if
(
dimSize
===
3
)
{
dimensions
=
[
'
radius
'
,
'
angle
'
,
'
value
'
];
}
}
}
var
nameList
=
[];
if
(
categoryAxisModel
)
{
var
categories
=
categoryAxisModel
.
get
(
'
data
'
);
if
(
categories
)
{
var
dataLen
=
data
.
length
;
// Ordered data is given explicitly like
// [[1, 0.2], [2, 0.3], [3, 0.15]]
// Pick the category
if
(
data
[
0
]
&&
data
[
0
].
length
>
1
&&
categories
.
length
>
dataLen
)
{
nameList
=
[];
for
(
var
i
=
0
;
i
<
dataLen
;
i
++
)
{
nameList
[
i
]
=
categories
[
data
[
i
][
0
]];
}
}
else
{
nameList
=
categories
.
slice
();
}
}
}
var
list
=
new
List
(
dimensions
,
seriesModel
);
list
.
initData
(
data
,
nameList
);
return
list
;
};
return
List
;
});
\ No newline at end of file
src/echarts.js
浏览文件 @
9b9c01d0
...
...
@@ -121,7 +121,7 @@ define(function (require) {
option
=
zrUtil
.
clone
(
option
,
true
);
var
ecModel
=
this
.
_model
;
if
(
!
ecModel
||
notMerge
)
{
if
(
!
ecModel
||
notMerge
)
{
ecModel
=
new
GlobalModel
(
option
,
null
,
this
.
_theme
);
this
.
_model
=
ecModel
;
}
...
...
src/model/Series.js
浏览文件 @
9b9c01d0
...
...
@@ -32,6 +32,12 @@ define(function(require) {
*/
defaultOption
:
null
,
/**
* Data provided for legend
* @type {Function}
*/
legendDataProvider
:
null
,
init
:
function
(
option
,
parentModel
,
ecModel
,
dependentModels
,
seriesIndex
)
{
/**
* @type {number}
...
...
@@ -44,7 +50,7 @@ define(function(require) {
if
(
seriesName
==
null
)
{
seriesName
=
this
.
get
(
'
type
'
)
+
''
+
seriesIndex
;
}
this
.
name
+
=
seriesName
+
''
;
this
.
name
=
seriesName
+
''
;
/**
* @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph}
...
...
@@ -52,10 +58,7 @@ define(function(require) {
*/
this
.
_data
=
this
.
getInitialData
(
option
,
ecModel
);
this
.
_dataBeforeProcessing
=
this
.
_data
.
cloneShallow
();
this
.
_itemVisuals
=
[];
this
.
_itemLayouts
=
[];
this
.
_dataBeforeProcessed
=
this
.
_data
.
cloneShallow
();
},
mergeDefaultAndTheme
:
function
(
option
,
ecModel
)
{
...
...
@@ -71,7 +74,7 @@ define(function(require) {
// TODO Merge data?
if
(
data
)
{
this
.
_data
=
data
;
this
.
_dataBeforeProcess
ing
=
data
.
cloneShallow
();
this
.
_dataBeforeProcess
ed
=
data
.
cloneShallow
();
}
},
...
...
@@ -82,12 +85,20 @@ define(function(require) {
getInitialData
:
function
()
{},
/**
* @return {module:echarts/data/List
|module:echarts/data/Graph|module:echarts/data/Tree
}
* @return {module:echarts/data/List}
*/
getData
:
function
()
{
return
this
.
_data
;
},
/**
* Get data before processed
* @return {module:echarts/data/List}
*/
getDataAll
:
function
()
{
return
this
.
_dataBeforeProcessed
;
},
// FIXME
/**
* Default tooltip formatter
...
...
@@ -108,7 +119,7 @@ define(function(require) {
},
restoreData
:
function
()
{
this
.
_data
=
this
.
_dataBeforeProcess
ing
.
cloneShallow
();
this
.
_data
=
this
.
_dataBeforeProcess
ed
.
cloneShallow
();
}
});
...
...
test/bar.html
浏览文件 @
9b9c01d0
...
...
@@ -9,6 +9,11 @@
html
,
body
,
#main
{
width
:
100%
;
height
:
100%
;
margin
:
0
;
}
#main
{
width
:
1000px
;
background
:
#999
;
}
</style>
<div
id=
"main"
></div>
...
...
@@ -38,20 +43,27 @@
data3
.
push
(
Math
.
random
());
}
var
itemStyle
=
{
normal
:
{
},
emphasis
:
{
barBorderColor
:
'
red
'
,
barBorderWidth
:
1
}
};
console
.
profile
(
'
setOption
'
);
chart
.
setOption
({
legend
:
{
data
:
[{
name
:
'
bar
'
,
itemStyle
:
{
normal
:
{
// color: 'blue'
}
}
name
:
'
bar
'
},
'
bar2
'
,
'
bar3
'
],
selected
:
{
// 'bar': false
}
},
orient
:
'
vertical
'
,
x
:
'
right
'
,
align
:
'
left
'
},
tooltip
:
{},
xAxis
:
{
...
...
@@ -70,16 +82,19 @@
name
:
'
bar
'
,
type
:
'
bar
'
,
stack
:
'
one
'
,
itemStyle
:
itemStyle
,
data
:
data1
},
{
name
:
'
bar2
'
,
type
:
'
bar
'
,
stack
:
'
one
'
,
itemStyle
:
itemStyle
,
data
:
data2
},
{
name
:
'
bar3
'
,
type
:
'
bar
'
,
stack
:
'
two
'
,
itemStyle
:
itemStyle
,
data
:
data3
}]
});
...
...
test/dataZoom-cartesian-h.html
浏览文件 @
9b9c01d0
...
...
@@ -20,7 +20,8 @@
'
echarts/component/legend
'
,
'
echarts/component/grid
'
,
'
echarts/component/axis
'
,
'
echarts/component/dataZoom
'
'
echarts/component/dataZoom
'
,
'
echarts/component/tooltip
'
],
function
(
echarts
)
{
var
chart
=
echarts
.
init
(
document
.
getElementById
(
'
main
'
),
null
,
{
...
...
@@ -42,21 +43,28 @@
chart
.
setOption
({
legend
:
{
data
:
[
'
line
'
,
'
line2
'
,
'
line3
'
]
},
tooltip
:
{
},
xAxis
:
{
// data: ['类目1', '类目2', '类目3', '类目4', '类目5',]
data
:
xAxisData
,
boundaryGap
:
tru
e
boundaryGap
:
fals
e
},
yAxis
:
{
// scale: true
boundaryGap
:
false
},
series
:
[
{
name
:
'
line
'
,
type
:
'
line
'
,
data
:
data1
data
:
data1
,
itemStyle
:
{
normal
:
{
areaStyle
:
{}
}
}
},
{
name
:
'
line2
'
,
...
...
@@ -70,7 +78,8 @@
}
],
dataZoom
:
{
show
:
true
show
:
true
,
end
:
30
}
});
})
...
...
test/dataZoom-cartesian-v.html
浏览文件 @
9b9c01d0
...
...
@@ -41,7 +41,7 @@
chart
.
setOption
({
legend
:
{
data
:
[
'
line
'
,
'
line2
'
,
'
line
3
'
]
data
:
[
'
bar
'
,
'
bar2
'
,
'
bar
3
'
]
},
xAxis
:
{
// data: ['类目1', '类目2', '类目3', '类目4', '类目5',]
...
...
@@ -54,17 +54,17 @@
},
series
:
[
{
name
:
'
line
'
,
name
:
'
bar
'
,
type
:
'
bar
'
,
data
:
data1
},
{
name
:
'
line
2
'
,
name
:
'
bar
2
'
,
type
:
'
bar
'
,
data
:
data2
},
{
name
:
'
line
3
'
,
name
:
'
bar
3
'
,
type
:
'
bar
'
,
data
:
data3
}
...
...
test/dataZoom-scatter-hv.html
浏览文件 @
9b9c01d0
...
...
@@ -31,35 +31,42 @@
var
data2
=
[];
var
data3
=
[];
for
(
var
i
=
0
;
i
<
100
;
i
++
)
{
data1
.
push
([
Math
.
random
()
*
5
,
Math
.
random
()
*
4
,
Math
.
random
()]);
data2
.
push
([
Math
.
random
()
*
10
,
Math
.
random
()
*
5
,
Math
.
random
()]);
for
(
var
i
=
0
;
i
<
100
000
;
i
++
)
{
data1
.
push
([
Math
.
random
()
*
15
,
Math
.
random
()
*
10
,
Math
.
random
()]);
data2
.
push
([
Math
.
random
()
*
10
,
Math
.
random
()
*
10
,
Math
.
random
()]);
data3
.
push
([
Math
.
random
()
*
15
,
Math
.
random
()
*
10
,
Math
.
random
()]);
}
// console.profile('setOption');
chart
.
setOption
({
animation
:
false
,
legend
:
{
data
:
[
'
scatter
'
,
'
scatter2
'
,
'
scatter3
'
]
},
xAxis
:
{
type
:
'
value
'
,
splitLine
:
{
show
:
fals
e
show
:
tru
e
}
},
yAxis
:
{
type
:
'
value
'
,
splitLine
:
{
show
:
fals
e
show
:
tru
e
}
},
dataZoom
:
[
{
show
:
true
,
orient
:
'
vertical
'
orient
:
'
vertical
'
,
start
:
1
,
end
:
3
},
{
show
:
true
,
orient
:
'
horizontal
'
orient
:
'
horizontal
'
,
start
:
1
,
end
:
5
}
],
series
:
[{
...
...
@@ -68,10 +75,10 @@
itemStyle
:
{
normal
:
{
opacity
:
0.8
,
shadowBlur
:
10
,
shadowOffsetX
:
0
,
shadowOffsetY
:
0
,
shadowColor
:
'
rgba(0, 0, 0, 0.5)
'
//
shadowBlur: 10,
//
shadowOffsetX: 0,
//
shadowOffsetY: 0,
//
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
symbolSize
:
function
(
val
)
{
...
...
@@ -84,10 +91,10 @@
itemStyle
:
{
normal
:
{
opacity
:
0.8
,
shadowBlur
:
10
,
shadowOffsetX
:
0
,
shadowOffsetY
:
0
,
shadowColor
:
'
rgba(0, 0, 0, 0.5)
'
//
shadowBlur: 10,
//
shadowOffsetX: 0,
//
shadowOffsetY: 0,
//
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
symbolSize
:
function
(
val
)
{
...
...
@@ -100,10 +107,10 @@
itemStyle
:
{
normal
:
{
opacity
:
0.8
,
shadowBlur
:
10
,
shadowOffsetX
:
0
,
shadowOffsetY
:
0
,
shadowColor
:
'
rgba(0, 0, 0, 0.5)
'
//
shadowBlur: 10,
//
shadowOffsetX: 0,
//
shadowOffsetY: 0,
//
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
symbolSize
:
function
(
val
)
{
...
...
@@ -112,6 +119,7 @@
data
:
data3
}]
});
// console.profileEnd('setOption');
})
</script>
...
...
test/dynamicData.html
浏览文件 @
9b9c01d0
...
...
@@ -28,7 +28,7 @@
var
xAxisData
=
[];
var
data1
=
[];
var
count
=
0
;
for
(;
count
<
2
00
;
count
++
)
{
for
(;
count
<
5
00
;
count
++
)
{
xAxisData
.
push
(
'
类目
'
+
count
);
data1
.
push
(
+
Math
.
random
().
toFixed
(
3
));
}
...
...
@@ -49,7 +49,7 @@
// shadowColor: 'rgba(0, 0, 0, 0.4)'
},
areaStyle
:
{
}
}
};
...
...
@@ -67,7 +67,7 @@
// animation: false,
xAxis
:
{
axisLabel
:
{
interval
:
2
0
interval
:
4
0
},
data
:
xAxisData
,
boundaryGap
:
false
...
...
@@ -81,7 +81,7 @@
name
:
'
line
'
,
type
:
'
line
'
,
stack
:
'
all
'
,
symbol
:
'
circl
e
'
,
symbol
:
'
non
e
'
,
symbolSize
:
10
,
data
:
data1
,
itemStyle
:
itemStyle
...
...
@@ -105,7 +105,7 @@
data
:
data1
}]
});
},
10
00
);
},
5
00
);
})
</script>
...
...
test/pie.html
浏览文件 @
9b9c01d0
...
...
@@ -26,24 +26,12 @@
renderer
:
'
canvas
'
});
var
xAxisData
=
[];
var
data1
=
[];
var
data2
=
[];
var
data3
=
[];
for
(
var
i
=
0
;
i
<
100
;
i
++
)
{
xAxisData
.
push
(
'
类目
'
+
i
);
data1
.
push
(
+
Math
.
random
().
toFixed
(
3
));
data2
.
push
(
+
Math
.
random
().
toFixed
(
3
));
data3
.
push
(
+
Math
.
random
().
toFixed
(
3
));
}
var
itemStyle
=
{
normal
:
{
shadowBlur
:
10
,
shadowOffsetX
:
0
,
shadowOffsetY
:
5
,
shadowColor
:
'
rgba(0, 0, 0, 0.4)
'
//
shadowBlur: 10,
//
shadowOffsetX: 0,
//
shadowOffsetY: 5,
//
shadowColor: 'rgba(0, 0, 0, 0.4)'
}
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录