网状结构
配置项如下
let moduleDependencies = {
化工产业: ['化工上游', '化工中游', '化工下游'],
化工上游:[],
化工中游:[],
化工下游:['农林牧渔上游', '智能制造上游', '高端装备上游', '新能源汽车上游'],
高端装备制造业: ['高端装备上游', '高端装备中游', '高端装备下游'],
高端装备上游:[],
高端装备中游:[],
高端装备下游:[],
智能制造业: ['智能制造上游', '智能制造中游', '智能制造下游'],
智能制造上游:[],
智能制造中游:[],
智能制造下游:['大数据产业上游', '新能源汽车上游', '高端装备上游'],
钢铁产业: ['钢铁上游', '钢铁中游', '钢铁下游'],
钢铁上游:[],
钢铁中游:[],
钢铁下游:['高端装备上游', '智能制造上游', '新能源汽车上游'],
新能源汽车制造业:['新能源汽车上游', '新能源汽车中游', '新能源汽车下游'],
新能源汽车上游:[],
新能源汽车中游:[],
新能源汽车下游:[],
大数据产业: ['大数据产业上游', '大数据产业中游', '大数据产业下游'],
大数据产业上游:[],
大数据产业中游:[],
大数据产业下游:['农林牧渔上游'],
现代农林牧渔: ['农林牧渔上游', '农林牧渔中游', '农林牧渔下游'],
农林牧渔上游:[],
农林牧渔中游:[],
农林牧渔下游:['生物医药上游'],
生物医药制造业:['生物医药上游', '生物医药中游', '生物医药下游'],
生物医药上游:[],
生物医药中游:[],
生物医药下游:[],
}
let data = {
nodes: [],
links: []
}
const defaultSymbolSize = 110;
const color1 = '#006acc';
const color2 = '#ffffff';
const color3 = '#10a050';
for (var [key, modules] of Object.entries(moduleDependencies)) {
data.nodes.push({
name: key,
symbolSize: defaultSymbolSize,
category: 0
});
}
for (var [key, modules] of Object.entries(moduleDependencies)) {
if (modules.length > 0) {
modules.forEach(module => {
data.links.push({
source: key,
target: module,
name: ''
});
data.nodes.forEach(node => {
if (node.name === module) {
node.symbolSize += 8;
}
})
});
}
}
data.nodes.forEach(node => {
if (node.category === 0) {
node.itemStyle = {
color: color1
};
}
if (node.symbolSize === 0) {
node.symbolSize = defaultSymbolSize
}
});
data.links.forEach(link => {
link.label = {
align: 'center',
fontSize: 8
};
// if (link.name === '') {
link.lineStyle = {
color: color2,
lineWidth:20
}
// }
});
let categories = [{
name: '产业链',
itemStyle: {
// color: color1
"normal": {
"borderColor": "#00fff7",
"borderWidth": 4,
"shadowBlur": 20,
"shadowColor": "#00fff7",
"color": "#11213b"
}
}
}]
option = {
title: {
text: '新经济产业链网状结构图',
textStyle:{color:'#fff',fontSize:21}
},
legend: [{
// selectedMode: 'single',
data: categories.map(x => x.name),
textStyle: {
color: "#fff"
}
// icon: 'circle'
}],
series: [{
type: 'graph',
layout: 'force',
symbolSize: defaultSymbolSize,
draggable: true,
roam: true,
focusNodeAdjacency: true,
categories: categories,
edgeSymbol: ['', 'arrow'],
// edgeSymbolSize: [80, 10],
edgeLabel: {
normal: {
show: true,
textStyle: {
fontSize: 50
},
formatter(x) {
return x.data.name;
}
}
},
lineStyle: {
normal: {
opacity: 0.9,
width: 7,
curveness: 0
}
},
label: {
show: true
},
force: {
repulsion: 2000,
edgeLength: 130
},
data: data.nodes,
links: data.links
}]
}