案例1
- 参考
- 代码如下
<!--
此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=bar-histogram
-->
<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="width: 400px;height: 350px"></div>
<script src="./ecStat.min.js"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script>
<!-- Uncomment this line if you want to dataTool extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/dataTool.min.js"></script>
-->
<!-- Uncomment this line if you want to use gl extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts-gl/2/files/dist/echarts-gl.min.js"></script>
-->
<!-- Uncomment this line if you want to echarts-stat extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts-stat/latest/files/dist/ecStat.min.js"></script>
-->
<!-- Uncomment this line if you want to use map
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/china.js"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/world.js"></script>
-->
<!-- Uncomment these two lines if you want to use bmap extension
<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_API_KEY"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/bmap.min.js"></script>
-->
<script type="text/javascript">
var dom = document.getElementById('container');
var myChart = echarts.init(dom, null, {
renderer: 'canvas',
useDirtyRect: false
});
var app = {};
var option;
// See https://github.com/ecomfe/echarts-stat
echarts.registerTransform(ecStat.transform.histogram);
option = {
dataset: [
{
source: [
[8.3, 143],
[8.6, 214],
[8.8, 251],
[10.5, 26],
[10.7, 86],
[10.8, 93],
[11.0, 176],
[11.0, 39],
[11.1, 221],
[11.2, 188],
[11.3, 57],
[11.4, 91],
[11.4, 191],
[11.7, 8],
[12.0, 196],
[12.9, 177],
[12.9, 153],
[13.3, 201],
[13.7, 199],
[13.8, 47],
[14.0, 81],
[14.2, 98],
[14.5, 121],
[16.0, 37],
[16.3, 12],
[17.3, 105],
[17.5, 168],
[17.9, 84],
[18.0, 197],
[18.0, 155],
[20.6, 125]
]
},
{
transform: {
type: 'ecStat:histogram',
config: {}
}
},
{
transform: {
type: 'ecStat:histogram',
// print: true,
config: { dimensions: [1] }
}
}
],
tooltip: {},
grid: [
{
top: '50%',
right: '50%'
},
{
bottom: '52%',
right: '50%'
},
{
top: '50%',
left: '52%'
}
],
xAxis: [
{
scale: true,
gridIndex: 0
},
{
type: 'category',
scale: true,
axisTick: { show: false },
axisLabel: { show: false },
axisLine: { show: false },
gridIndex: 1
},
{
scale: true,
gridIndex: 2
}
],
yAxis: [
{
gridIndex: 0
},
{
gridIndex: 1
},
{
type: 'category',
axisTick: { show: false },
axisLabel: { show: false },
axisLine: { show: false },
gridIndex: 2
}
],
series: [
{
name: 'origianl scatter',
type: 'scatter',
xAxisIndex: 0,
yAxisIndex: 0,
encode: { tooltip: [0, 1] },
datasetIndex: 0
},
{
name: 'histogram',
type: 'bar',
xAxisIndex: 1,
yAxisIndex: 1,
barWidth: '99.3%',
label: {
show: true,
position: 'top'
},
encode: { x: 0, y: 1, itemName: 4 },
datasetIndex: 1
},
{
name: 'histogram',
type: 'bar',
xAxisIndex: 2,
yAxisIndex: 2,
barWidth: '99.3%',
label: {
show: true,
position: 'right'
},
encode: { x: 1, y: 0, itemName: 4 },
datasetIndex: 2
}
]
};
if (option && typeof option === 'object') {
myChart.setOption(option);
}
window.addEventListener('resize', myChart.resize);
</script>
</body>
</html>
- 效果图
案例2
- 参考
- 代码如下
<!--
此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=custom-profit
-->
<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="width: 400px;height: 350px"></div>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script>
<!-- Uncomment this line if you want to dataTool extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/dataTool.min.js"></script>
-->
<!-- Uncomment this line if you want to use gl extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts-gl/2/files/dist/echarts-gl.min.js"></script>
-->
<!-- Uncomment this line if you want to echarts-stat extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts-stat/latest/files/dist/ecStat.min.js"></script>
-->
<!-- Uncomment this line if you want to use map
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/china.js"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/world.js"></script>
-->
<!-- Uncomment these two lines if you want to use bmap extension
<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_API_KEY"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/bmap.min.js"></script>
-->
<script type="text/javascript">
var dom = document.getElementById('container');
var myChart = echarts.init(dom, null, {
renderer: 'canvas',
useDirtyRect: false
});
var app = {};
var option;
const colorList = [
'#4f81bd',
'#c0504d',
'#9bbb59',
'#604a7b',
'#948a54',
'#e46c0b'
];
const data = [
[10, 16, 3, 'A'],
[16, 18, 15, 'B'],
[18, 26, 12, 'C'],
[26, 32, 22, 'D'],
[32, 56, 7, 'E'],
[56, 62, 17, 'F']
].map(function (item, index) {
return {
value: item,
itemStyle: {
color: colorList[index]
}
};
});
option = {
title: {
text: 'Profit',
left: 'center'
},
tooltip: {},
xAxis: {
scale: true
},
yAxis: {},
series: [
{
type: 'custom',
renderItem: function (params, api) {
var yValue = api.value(2);
var start = api.coord([api.value(0), yValue]);
var size = api.size([api.value(1) - api.value(0), yValue]);
var style = api.style();
return {
type: 'rect',
shape: {
x: start[0],
y: start[1],
width: size[0],
height: size[1]
},
style: style
};
},
label: {
show: true,
position: 'top'
},
dimensions: ['from', 'to', 'profit'],
encode: {
x: [0, 1],
y: 2,
tooltip: [0, 1, 2],
itemName: 3
},
data: data
}
]
};
if (option && typeof option === 'object') {
myChart.setOption(option);
}
window.addEventListener('resize', myChart.resize);
</script>
</body>
</html>
- 效果图
案例3
- 参考
- 代码如下
<!--
此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=pie-parliament-transition
-->
<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="width: 400px;height: 350px"></div>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script>
<!-- Uncomment this line if you want to dataTool extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/dataTool.min.js"></script>
-->
<!-- Uncomment this line if you want to use gl extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts-gl/2/files/dist/echarts-gl.min.js"></script>
-->
<!-- Uncomment this line if you want to echarts-stat extension
<script type="text/javascript" src="https://registry.npmmirror.com/echarts-stat/latest/files/dist/ecStat.min.js"></script>
-->
<!-- Uncomment this line if you want to use map
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/china.js"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/world.js"></script>
-->
<!-- Uncomment these two lines if you want to use bmap extension
<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_API_KEY"></script>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/bmap.min.js"></script>
-->
<script type="text/javascript">
var dom = document.getElementById('container');
var myChart = echarts.init(dom, null, {
renderer: 'canvas',
useDirtyRect: false
});
var app = {};
var option;
const data = [
{ value: 800, name: 'A' },
{ value: 635, name: 'B' },
{ value: 580, name: 'C' },
{ value: 484, name: 'D' },
{ value: 300, name: 'E' },
{ value: 200, name: 'F' }
];
const defaultPalette = [
// '#51689b', '#ce5c5c', '#fbc357', '#8fbf8f', '#659d84', '#fb8e6a', '#c77288', '#786090', '#91c4c5', '#6890ba'
'#5470c6',
'#91cc75',
'#fac858',
'#ee6666',
'#73c0de',
'#3ba272',
'#fc8452',
'#9a60b4',
'#ea7ccc'
];
const radius = ['30%', '80%'];
const pieOption = {
series: [
{
type: 'pie',
id: 'distribution',
radius: radius,
label: {
show: false
},
universalTransition: true,
animationDurationUpdate: 1000,
data: data
}
]
};
const parliamentOption = (function () {
let sum = data.reduce(function (sum, cur) {
return sum + cur.value;
}, 0);
let angles = [];
let startAngle = -Math.PI / 2;
let curAngle = startAngle;
data.forEach(function (item) {
angles.push(curAngle);
curAngle += (item.value / sum) * Math.PI * 2;
});
angles.push(startAngle + Math.PI * 2);
function parliamentLayout(startAngle, endAngle, totalAngle, r0, r1, size) {
let rowsCount = Math.ceil((r1 - r0) / size);
let points = [];
let r = r0;
for (let i = 0; i < rowsCount; i++) {
// Recalculate size
let totalRingSeatsNumber = Math.round((totalAngle * r) / size);
let newSize = (totalAngle * r) / totalRingSeatsNumber;
for (
let k = Math.floor((startAngle * r) / newSize) * newSize;
k < Math.floor((endAngle * r) / newSize) * newSize - 1e-6;
k += newSize
) {
let angle = k / r;
let x = Math.cos(angle) * r;
let y = Math.sin(angle) * r;
points.push([x, y]);
}
r += size;
}
return points;
}
return {
series: {
type: 'custom',
id: 'distribution',
data: data,
coordinateSystem: undefined,
universalTransition: true,
animationDurationUpdate: 1000,
renderItem: function (params, api) {
var idx = params.dataIndex;
var viewSize = Math.min(api.getWidth(), api.getHeight());
var r0 = ((parseFloat(radius[0]) / 100) * viewSize) / 2;
var r1 = ((parseFloat(radius[1]) / 100) * viewSize) / 2;
var cx = api.getWidth() * 0.5;
var cy = api.getHeight() * 0.5;
var size = viewSize / 50;
var points = parliamentLayout(
angles[idx],
angles[idx + 1],
Math.PI * 2,
r0,
r1,
size + 3
);
return {
type: 'group',
children: points.map(function (pt) {
return {
type: 'circle',
autoBatch: true,
shape: {
cx: cx + pt[0],
cy: cy + pt[1],
r: size / 2
},
style: {
fill: defaultPalette[idx % defaultPalette.length]
}
};
})
};
}
}
};
})();
let currentOption = (option = pieOption);
setInterval(function () {
currentOption = currentOption === pieOption ? parliamentOption : pieOption;
myChart.setOption(currentOption);
}, 2000);
if (option && typeof option === 'object') {
myChart.setOption(option);
}
window.addEventListener('resize', myChart.resize);
</script>
</body>
</html>
- 效果图:过渡