惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Help Net Security
Help Net Security
月光博客
月光博客
N
News and Events Feed by Topic
Cloudbric
Cloudbric
博客园 - 司徒正美
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog
The Register - Security
The Register - Security
The Hacker News
The Hacker News
I
InfoQ
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
C
Cisco Blogs
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Latest news
Latest news
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
P
Palo Alto Networks Blog
T
Tor Project blog
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - ^Mao^

不同缩放下适配 vxe-table 3D饼图 openlayer实现给线的附近添加点,点支持移动 element-plus el-select html导出pdf openlayers增加移动功能 适配 部分页面统计用户访问时长 openlayers基本使用(街景+标注+绘制) 使用openlayer绘制街景地图 正则表达式--取对应表达式的值 vue2实现el-table-column多级效果 echarts-雷达图 echarts--地图 echarts散点图区域设置 vant 的vant-uploader组件问题 Threejs学习 Echarts-普通地图和3D地图实现 test
散点图效果
^Mao^ · 2025-05-13 · via 博客园 - ^Mao^

效果

代码

var uploadedDataURL2 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWoAAACFCAYAAAByvbIAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNTI0OWE0Ni0wMGZkLTQ5MDAtYWZmOS1jYmM3NjcwNzE0N2YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTNDNDYyQjZBREQ2MTFFOUE2ODJBQjZCRjQ4MDgyNzUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTAyMjFDQUNBREQ2MTFFOUE2ODJBQjZCRjQ4MDgyNzUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ZjczZmE5Yy0wZDYyLTRhNmMtOTQ1Ny03N2M4YTA5M2IyYTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo5OTAxN2QwNS1lNTgzLTExN2MtYmUzNy1mZWZjMjY1Mzc4NTYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4QJw7RAAAD6klEQVR42uzd34tUZRzH8bPLhoW0JAZSSiyEkIRe2EWi6I3eKJE3dZFUoBgaan9CF/4J/SARKSS8iAShUAgKAgMlKAiEkFjCpRTBSDYKV5e1z8OMEKHuuDtz5hFeL/jysLMz58Bz8WaZPXNmZGpysmnbu2d/n8hyMPN4A8B9jQ0h0uuy7M0ssf0AlYU6kd6S5bXMqK0HqCjUCfRIlp2Z7bYcoLJQJ9LlHG9mXrTdAJWFOpF+LMv+zHO2GqCyUCfSy7K8k3naNgNUFupEelWWQ5knbDFAZaFOpNc0nbc7HrW9AJWFOpHekOWNZgjXZwMI9fyR3pHl5cyIbQWoKNQJdPnwyq7MZtsJUFmoE+nyMfC3MmttJUBloU6kx7McyEzYRoDKQp1Ir2g610g/aQsBKgt1Iv1s9y/ppbYPoLJQJ9Lrs+zJPGLrACoLdSK9NcurjcvvAOoKdfcWpa9kttkugMpCnUiXtzh2Z16wVQCVhTqRLv8sfDuz2jYBVBbqRHp507n73VO2CKCyUCfSz3QjPW57ACoLdSL9fJZ9jW8IB6gv1In0piyvN74hHKCuUHcvv3upOwBU+Bd1+YbwjbYCoE6jIg1Qf6gBEGoAhBpAqAEQagCEGkCoARBqAKEGQKgBEGoAoQZAqAGE2hYACDUAQg0g1AAINQBCDSDUAAg1gFADINQACDWAUAMg1AAINYBQAyDUAEINgFADINQAQg2AUAMINQBCDYBQAwg1AEINgFADCDUAQg0g1AAINQBCDSDUAAg1gFADINQACDWAUAMg1AAINYBQAyDUAEINgFADINQAQg2AUAMINQBCDYBQAwg1AEINgFADCDUAQg0g1AAINQBCDSDUAAg1gFADINQACDWAUAMg1AAINcDD5NyYPQCo1unMl0INUJ+5zInDm1d+V34QaoC6zGSOJtIX7jwg1AD1mM68n0hP/fdBoQaow5VupP/4/y+EGmD4fsl8lEj/fbdfCjXAcP2Q+SSRvnWvJwg1wPB8nTmZSN++35OEGqB9JcyfJ9Df9PJkoQZoV3mL4+NE+sdeXyDUAO0p/yz8MJGefJAXCTVAO65l3kukrz7oC4UaYPAuZT5IpKcX8mKhBhis8lHw8pHwmYUeQKgBBqfcVKncXGluMQcRaoD+K5fffZFAn+nHwYQaoL9mM58m0uf7dUChBuifG5kjifTP/TyoUAP0x/Wmc/e73/p9YKEGWLzLTeca6T8HcXChBlici03n7Y5/BnUCoQZYuO8zxxPp2UGeRKgBFuarzKn5blEq1ADtKx9e+SyB/ratEwo1QO9uZo4l0j+1eVKhBujNX03nFqW/tn3ifwUYACTfn86fpYgKAAAAAElFTkSuQmCC';
var indicator = [
    { name: '审计监察部', max: 100, num: 1 },
    { name: '行政事务部', max: 100, num: 2 },
    { name: '信息导航管理', max: 100, num: 3 },
    { name: '安全质量部', max: 100, num: 4 },
    { name: '安检护卫部', max: 100, num: 5 },
];
var dataValue = [43, 90, 80, 53, 78, 89, 77, 50]
var dataArr = [
    {
        value: dataValue,
        name: '',
        itemStyle: {
            normal: {
                lineStyle: {
                    color: '#17E7FF',
                },
                shadowColor: '#17E7FF',
                shadowBlur: 5,
            },
        },
    },
];
function contains(arr, obj) {
  var i = arr.length;
  while (i--) {
    if (arr[i].name === obj) {
      return i;
    }
  }
  return false;
}
var num = 80;
option = {
    backgroundColor: '#000928',
    color: ['#17E7FF'],
    title: {
        text: [`{span|${num}}\n{b|综合评分}`].join(''),
        bottom: 'center',
        left: 'center',
        // triggerEvent: true, //开启雷达图的边角名称可点击
        textStyle: {
            rich: {
                span: {
                    fontSize: 50,
                    fontWeight: 500,
                    color: '#fff',
                    textShadowColor: 'rgba(120, 246, 255, 0.73)',
                    textShadowBlur: -1,
                    textShadowOffsetX: 0,
                    textShadowOffsetY: 2,
                },
                b: {
                    fontSize: 25,
                    color: '#D7F6F3',
                    lineHeight: 40,
                },
            },
        },
    },
    radar: {
        radius: '60%',
        // startAngle: 60, //坐标系起始角度,也就是第一个指示器轴的角度
        // z:5,
        // shape: 'circle',
        triggerEvent: true, //开启雷达图的边角名称可点击
        name: {
            // (圆外的标签)雷达图每个指示器名称的配置项。分
            formatter: (value) => {
                 let i = contains(indicator, value); // 处理对应要显示的样式
                return '{a|' + dataValue[i] + '}\n' + '{b|' + value + '}';
            },
            textStyle: {
                padding: [10, 20, 5, 20],
            },
            backgroundColor: {
                image: uploadedDataURL2,
            },
            // width: 200,
            // height: 70,
            rich: {
                a: {
                    align: 'center',
                    color: '#6EFFFD',
                    fontWeight: 500,
                    height: 30,
                    fontSize: 28,
                },
                b: {
                    align: 'center',
                    color: '#FFFFFF',
                    fontSize: 14,
                },
                // triggerEvent: true,//开启雷达图的边角名称可点击
            },
        },

        nameGap: 8,
        indicator: indicator,
        splitArea: {
            // 坐标轴在 grid 区域中的分隔区域,默认不显示。
            show: false,
        },
        axisLine: {
            //轴线
            show: true,
            lineStyle: {
                color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
                    {
                        color: '#15506D0D',
                        offset: 0,
                    },
                    {
                        color: '#95E4F0',
                        offset: 0.9,
                    },
                ]),
            },
        },
        splitLine: {
            show: true,
            lineStyle: {
                width: 1,
                color: 'rgba(153, 209, 246, 0.5)', // 网格分割线颜色
            },
        },
    },
    series: [
        {
            type: 'radar',
            symbolSize: 10,
            symbol: 'circle',
            data: dataArr,
            areaStyle: {
                color: '#9EDDFF',
                opacity: 0.3,
            },
            lineStyle: {
                color: new echarts.graphic.LinearGradient(
                    0,
                    0,
                    0,
                    1,
                    [
                        {
                            offset: 0,
                            color: '#00D1FF',
                        },
                        {
                            offset: 1,
                            color: '#00A5FE',
                        },
                    ],
                    false
                ),
                width: 5,
            },
            itemStyle: {
                color: '#fff ',
                borderColor: new echarts.graphic.LinearGradient(
                    0,
                    0,
                    0,
                    1,
                    [
                        {
                            offset: 0,
                            color: '#00D1FF',
                        },
                        {
                            offset: 1,
                            color: '#00A5FE',
                        },
                    ],
                    false
                ),
                borderWidth: 2,
                opacity: 1,
            },
        },
    ],
};

效果

代码

const dataname = ['认证', '邀请', '注册', 'VIP会员', '等级', '信用分'];
const datamax = [100, 100, 100, 100, 100, 100];
const value1 = [89, 93, 60, 59, 85, 91];
const num = 72;

var indicator = [];
for (var i = 0; i < dataname.length; i++) {
    indicator.push({
        name: dataname[i],
        max: 100,
    });
}
option = {
    backgroundColor: '#2e6cf6',
    title: {
        text: [`{span|${num}}`].join(''),
        bottom: 'center',
        left: 'center',
        textStyle: {
            rich: {
                span: {
                    fontSize: 120,
                    color: '#fff',
                },
            },
        },
    },
    radar: {
        center: ['50%', '50%'],
        radius: '50%',
        splitArea: {
            areaStyle: {
                color: ['rgba(255,255,255,0.1)'].reverse(),
            },
        },
        axisLine: {
            show: true,
            lineStyle: {
                // color: '#fff',
                color: ['rgba(255,255,255,0.3)'].reverse(),
            },
        },
        splitLine: {
            show: false,
            lineStyle: {
                color: '#ccc',
            },
        },
        name: {
            show: true, // 是否显示工艺等文字
            formatter: function (name) {
                const i = dataname.indexOf(name);
                return `{name|${name}}`;
                // return `{name1|${value1[i]}}\n{name3|${name}}`;
            },

            lineHeight: 20,
            rich: {
                name: {
                    color: '#fff',
                    fontSize: 20,
                    align: 'center',
                },
                // name2: {
                //     color: '#DFB48F',
                //     align: 'center',
                // },
                // name3: {
                //     color: '#606266',
                //     align: 'center',
                // },
            },
        },
        indicator: indicator,
    },

    series: [
        {
            name: '信用分',
            type: 'radar',
            symbol: 'none',
            areaStyle: { normal: { color: 'rgba(255,255,255,0.7)' } },
            lineStyle: { width: 0 },
            data: [value1],
        },
    ],
};