椭圆形关系图echarts 配置项内容和展示

椭圆的左半部分,改变坐标值可获得椭圆右半部分

配置项如下
      var getY = function(x) {
    let y = Math.sqrt(1 - Math.pow((x - 120) / 120, 2)) * 50 + 50;
    return y;
}
const targetCoord = [79, 42];
const curveness = 0;
const linesData = [];
const categories = [{
    itemStyle: {
        normal: {
            color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                    offset: 0,
                    color: "#01acca"
                },
                {
                    offset: 1,
                    color: "#5adbe7"
                }
            ])
        }
    },
    label: {
        normal: {
            fontSize: "12"
        }
    }
}];

const item = {
    name: "",
    value: targetCoord,
    symbolSize: 0,
    itemStyle: {
        normal: {
            color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                    offset: 0,
                    color: "#157eff"
                },
                {
                    offset: 1,
                    color: "#35c2ff"
                }
            ])
        }
    },
    data: {},
    label: {
        normal: {
            fontSize: "14"
        }
    }
};

const items = [{
        name: "",
        category: 0,
        active: true,
        value: [100, getY(100)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [95, getY(95)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [90, getY(90)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [85, getY(85)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [80, getY(80)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [75, getY(75)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [70, getY(70)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [65, getY(65)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [60, getY(60)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [55, getY(55)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [50, getY(50)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [45, getY(45)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [40, getY(40)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [35, getY(35)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [30, getY(30)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [25, getY(25)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [20, getY(20)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [15, getY(15)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [10, getY(10)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [5.5, getY(5.5)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [2, getY(2)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [0.2, getY(0.2)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [0.3, 100 - getY(0.3)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [2, 100 - getY(2)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [5, 100 - getY(5)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [9, 100 - getY(9)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [14, 100 - getY(14)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [19, 100 - getY(19)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [24, 100 - getY(24)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [29, 100 - getY(29)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [34, 100 - getY(34)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [39, 100 - getY(39)]
    },
    {
        name: "",
        category: 0,
        active: true,
        value: [44, 100 - getY(44)]
    },
];

const data = items.concat([item]);

items.forEach(function(el) {
    linesData.push([{
            coord: targetCoord
        },
        {
            coord: el.value
        }
    ]);
});

const links = items.map(el => {
    return {
        source: item.name,
        target: el.name,
        speed: el.speed,
        lineStyle: {
            normal: {
                color: el.speed ? "#12b5d0" : "#ff0000",
                curveness: curveness
            }
        }
    };
});

var option = {
    legend: {
        show:false,
    },
    xAxis: {
        show: false,
        type: "value"
    },
    yAxis: {
        show: false,
        type: "value"
    },
    series: [{
            type: "graph",
            layout: "none",
            coordinateSystem: "cartesian2d",
            symbolSize: 16,
            z: 3,
            circular: {
                rotateLabel: true
            },
            edgeLabel: {
                normal: {
                    show: false,
                }
            },
            label: {
                normal: {
                    show: false,
                }
            },
            itemStyle: {
                normal: {
                    shadowColor: "none"
                },
                emphasis: {}
            },
            lineStyle: {
                normal: {
                    width: 2,
                    shadowColor: "none"
                }
            },
            edgeSymbol: ["none", "none"],
            edgeSymbolSize: 8,
            data: data,
            links: links,
            categories: categories
        },
        {
            name: "A",
            type: "lines",
            coordinateSystem: "cartesian2d",
            z: 1,

            effect: {
                show: true,
                smooth: false,
                period: 3,
                trailLength: 0,
                symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAhCAYAAADtR0oPAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB2ElEQVQ4T32USU7DQBBFbcKMAAFigcSSg3ADtmzZc0juwQ6JMA9hCBAG81/Rv9W2HEp6cae7fk1tuW6appLVCWwmPTEOw0H2ww8CHHEaiLmERTh9ic/0bBBwiNOiWE7MCwynsXgVH2KCYFYLnNfFhtgSiMj8Lu4TIzFGQLQ1sS12xZFA8CZuxYk4FVdiRDmwIBDtiH1xIA7FsdgTZF4SA5xJTcNE3RSeio1gq4I+a08DAaWtiBhfMpqmP0T0mgXlaL/ZSMY4icx+3JMFRKUUnozPNhHs+TzuwBtEJiJztzEpAlBaXBwCR0bAIZdkQ2xBBC4FbJLhWdhehAUEzBn4A9SMkw0xe87QKolNDh+FjTUZyEzAXJKzcMA7Y0PgDFNLehC2O9HbQ5mBHnDAeEvLKYUA448z8EozTvZ4W8sessAZEHBZ3AWi8h6ikq6ASGSgrCfRvbj8LiFgk0MEzJ9psfaU8Gm9fGVJRKdhMljQyoCx6ZIYLSN1hmhYtEpik5LIgPNNWpdNt0pik2hEZZyXad1bkpt2D0S/EGUPvSW5Bz4pQ0E5UzN4Sjhdi3Pxb9NEcQbqPxNuGEGYv94Iux9ll1ESH2M9wywyWDj9LWOdM9hKZxsOyamqfgG1ZQ8JFbfSTwAAAABJRU5ErkJggg==",
                color: "rgba(55,155,255,0.5)",
                symbolSize: [12, 36]
                // delay:10
            },
            lineStyle: {
                normal: {
                    width: 1,
                    curveness: curveness,
                    color: "rgb(89,197,238)"
                }
            },
            data: linesData
        }
    ]
};
    
截图如下