UE接入ECharts图标加速可视化开发

数据可视化(ECharts) ​ 应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。我们引入 ‘立可得’ 数据可视化项目。​ 该项目除了使用了基础的DIV+CSS布局,还引入了一些C3技术,还引入了各类图表的绘制,以及高级的地图数据可视化案例。主要功能有:饼状图、柱状图、线形图、地图 …完成该项目需要具备以下知识:粗略代码统计:大白话:官方教程:五分钟上手ECharts自己步骤: 初始化echarts实例对象 指定配置项和数 阅读详情

UE 接入 ECharts,让数据会说话

先说结论:UE 里不需要自己画图表。把 ECharts 跑在 Web 面板里,通过消息通道跟 UE 三维场景双向联动,前端写图表,UE 做渲染,两边对接消息契约就行。

很多 UE 项目里,数据图表是刚需——设备监控面板、实时统计大屏、AI 分析结果展示——但用 UMG 画图表是一件极其痛苦的事。一个折线图,你要自己处理坐标轴缩放、数据映射、悬停提示、动画过渡,做出来的效果还比不上前端同学五分钟写出来的 ECharts demo。

这不是你的问题。ECharts 背后是百度整个前端团队十年的积累,它有 50+ 种图表类型、内置交互和动画、百万级数据渲染优化。你用 UMG 从零造轮子,就是在跟一个成熟生态打肉搏战。
在这里插入图片描述

ECharts 到底强在哪

给没接触过的 UE 开发者简单介绍一下:

  • 50+ 图表类型:折线图、柱状图、饼图、散点图、热力图、地图、3D 地球、仪表盘、桑基图、关系图……覆盖几乎所有数据可视化场景
  • 开箱即用的交互:缩放、拖拽、图例切换、数据点选中、tooltip 悬停,一行代码不用写
  • 百万级数据量:支持增量渲染和 WebGL 加速,大屏场景不卡顿
  • 高度可定制:颜色、字体、动画、主题、坐标轴,全都可以配
  • 生态丰富:Vue/React 封装、地图插件、时序数据插件、AI 辅助生成配置

所以问题不是"要不要用 ECharts",而是"怎么在 UE 里跑 ECharts"。

方案:把 ECharts 跑在 Web 面板里

架构很简单:

ECharts HTML 页面
       ↓
 WebNativeBrowser(CEF GPU 渲染)
       ↓
   UE 场景中的 Web 面板
       ↓
 JS ↔ UE 消息通道(< 1ms 延迟)
       ↓
   UE 蓝图 / C++ 业务逻辑

和原生 UE 控件不同,Web 面板里的 ECharts 是通过 GPU 共享纹理直接渲染到 UE 视口的,不经过 CPU 拷贝,不影响引擎渲染性能。

第一步:创建一个 ECharts 页面

你只需要写一个普通的 HTML 文件,放在插件的 Content 目录下:

<!-- Content/webnative/html/charts/monitor.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { background: rgba(0,0,0,0); overflow: hidden; }
        #chart { width: 100vw; height: 100vh; }
    </style>
</head>
<body>
    <div id="chart"></div>
    <script>
        const chart = echarts.init(document.getElementById('chart'), 'dark');

        // 从 UE 接收数据并更新图表
        WebNative.on('Chart.Data.Update', (messageBody) => {
            const data = JSON.parse(messageBody);
            chart.setOption({
                title: { text: data.title, textStyle: { color: '#fff' } },
                tooltip: { trigger: 'axis' },
                legend: { data: data.legends, textStyle: { color: '#aaa' } },
                xAxis: { type: 'category', data: data.xAxis },
                yAxis: { type: 'value' },
                series: data.series
            });
        });

        // 图表点击 → 通知 UE
        chart.on('click', (params) => {
            WebNative.send('Chart.Point.Click', JSON.stringify({
                seriesName: params.seriesName,
                dataIndex: params.dataIndex,
                value: params.value,
                name: params.name
            }));
        });

        // 图表缩放 → 通知 UE
        chart.on('datazoom', (params) => {
            WebNative.send('Chart.Zoom.Change', JSON.stringify({
                start: params.start,
                end: params.end
            }));
        });

        // 通知 UE 图表已就绪
        WebNative.send('Chart.Ready', '{}');
    </script>
</body>
</html>

第二步:UE 端发送数据到图表

在 UE 蓝图或 C++ 中,调用 SendMessageToJS 推送数据:

// UE C++ 端:构造 ECharts 数据并发送
void AMyDataActor::UpdateChart()
{
    TSharedPtr<FJsonObject> Root = MakeShareable(new FJsonObject);
    Root->SetStringField("title", "设备实时温度监控");

    // xAxis:时间点
    TArray<TSharedPtr<FJsonValue>> XAxisArray;
    XAxisArray.Add(MakeShareable(new FJsonValueString("08:00")));
    XAxisArray.Add(MakeShareable(new FJsonValueString("09:00")));
    XAxisArray.Add(MakeShareable(new FJsonValueString("10:00")));
    XAxisArray.Add(MakeShareable(new FJsonValueString("11:00")));
    Root->SetArrayField("xAxis", XAxisArray);

    // legends:图例
    TArray<TSharedPtr<FJsonValue>> LegendsArray;
    LegendsArray.Add(MakeShareable(new FJsonValueString("注塑机A")));
    LegendsArray.Add(MakeShareable(new FJsonValueString("注塑机B")));
    Root->SetArrayField("legends", LegendsArray);

    // series:数据系列(ECharts 标准格式)
    TArray<TSharedPtr<FJsonValue>> SeriesArray;

    TSharedPtr<FJsonObject> SeriesA = MakeShareable(new FJsonObject);
    SeriesA->SetStringField("name", "注塑机A");
    SeriesA->SetStringField("type", "line");
    TArray<TSharedPtr<FJsonValue>> DataA;
    DataA.Add(MakeShareable(new FJsonValueNumber(120)));
    DataA.Add(MakeShareable(new FJsonValueNumber(132)));
    DataA.Add(MakeShareable(new FJsonValueNumber(101)));
    DataA.Add(MakeShareable(new FJsonValueNumber(134)));
    SeriesA->SetArrayField("data", DataA);
    SeriesArray.Add(MakeShareable(new FJsonValueObject(SeriesA)));

    TSharedPtr<FJsonObject> SeriesB = MakeShareable(new FJsonObject);
    SeriesB->SetStringField("name", "注塑机B");
    SeriesB->SetStringField("type", "line");
    TArray<TSharedPtr<FJsonValue>> DataB;
    DataB.Add(MakeShareable(new FJsonValueNumber(220)));
    DataB.Add(MakeShareable(new FJsonValueNumber(182)));
    DataB.Add(MakeShareable(new FJsonValueNumber(191)));
    DataB.Add(MakeShareable(new FJsonValueNumber(234)));
    SeriesB->SetArrayField("data", DataB);
    SeriesArray.Add(MakeShareable(new FJsonValueObject(SeriesB)));

    Root->SetArrayField("series", SeriesArray);

    FString JsonString;
    TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonString);
    FJsonSerializer::Serialize(Root.ToSharedRef(), Writer);

    SendMessageToJS("Chart.Data.Update", JsonString);
}

第三步:图表交互反馈到三维场景

当用户点击图表上的数据点时,三维场景可以做出响应:

void AMyDataActor::OnMessageReceived(const FString& FunctionName, const FString& MessageBody)
{
    if (FunctionName == "Chart.Point.Click")
    {
        TSharedPtr<FJsonObject> Json;
        TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(MessageBody);
        if (FJsonSerializer::Deserialize(Reader, Json))
        {
            FString SeriesName = Json->GetStringField("seriesName");
            int32 DataIndex = Json->GetIntegerField("dataIndex");

            // 三维场景聚焦对应设备
            AActor* Device = FindDeviceByName(SeriesName);
            if (Device)
            {
                FocusCameraOn(Device);
                HighlightActor(Device);
            }
        }
    }
}

进阶:复杂图表场景

实时数据流

如果你需要每秒多次推送数据(比如设备振动曲线),建议做批量处理:

// 前端:合并高频数据,按动画帧更新
let pendingData = [];
let scheduled = false;

WebNative.on('Chart.RealTime.Data', (messageBody) => {
    pendingData.push(JSON.parse(messageBody));
    if (!scheduled) {
        scheduled = true;
        requestAnimationFrame(() => {
            const last = pendingData[pendingData.length - 1];
            chart.setOption({
                series: [{
                    data: chart.getOption().series[0].data.concat(pendingData.map(d => d.value)).slice(-100)
                }]
            });
            pendingData = [];
            scheduled = false;
        });
    }
});

3D 图表与场景联动

ECharts 支持 WebGL 3D 渲染,可以做 3D 地球、3D 散点图、3D 曲面。配合 UE 的场景相机:

// 当 UE 相机移动时,同步更新 3D 图表的视角
WebNative.on('Scene.Camera.Move', (messageBody) => {
    const camera = JSON.parse(messageBody);
    // ECharts GL 图表联动
    my3DChart.setOption({
        globe: {
            viewControl: {
                alpha: camera.pitch,
                beta: camera.yaw
            }
        }
    });
});

地图 + 三维场景

ECharts 内置中国地图和世界地图(需注册),可以作为 UE 三维场景的鸟瞰概览:

用户在地图上点击上海园区 → UE 三维场景飞到上海 → 显示园区细节
用户在 UE 里切换到全局视角 → 地图自动缩放到对应区域

性能:消息通道是关键

ECharts 和 UE 之间的联动性能,取决于中间的消息通道。WebNativeBrowser 的消息通道:

指标数据
单条消息延迟< 1ms
10 万条消息~220ms
每秒最大吞吐45 万条/秒
每帧最大派发10 万条

对于图表联动场景来说,这个性能绰绰有余。即使每秒 60 帧刷数据,每帧 800 条消息,延迟仍然在毫秒级。

对比:你用 UMG 画图表要多久

用 UMG 实现一个带 tooltip、缩放、图例切换的折线图:

  1. 用 UCanvas 自己画坐标轴——半天
  2. 处理数据到像素的映射——半天
  3. 实现鼠标悬停 tooltip——半天
  4. 实现拖拽缩放和滚轮缩放——一天
  5. 调试边界情况、性能优化——一天
  6. 换个项目想复用——发现耦合太死,重写

用 ECharts + WebNativeBrowser:

  1. 写一个 50 行 HTML 配置——十分钟
  2. 换项目:复制 HTML 文件,改配置——五分钟
  3. 效果:吊打手写版

把时间花在三维场景和业务逻辑上,图表的事交给 ECharts。

总结

UE 里做数据可视化,最优路径不是自己画——是把成熟的 Web 生态引进来。ECharts 经过了百万开发者和万亿次渲染的验证,UE 的三维渲染能力和 WebNativeBrowser 的 GPU 直通渲染让它能完美嵌入 UE 视口。

  • 前端写图表配置 → 十分钟一个复杂图表
  • UE 推送数据 → 一行 SendMessageToJS
  • 图表交互回传 → 三维场景响应
  • 同一套页面 → Windows / Linux 通用

让 UE 做它最擅长的事,让 Web 做它最擅长的事。


如果这篇对你有帮助,欢迎点赞收藏。关于 WebNativeBrowser 的完整文档和示例,可以访问我们的 GitHub 仓库:starTechnology1994/UEWebNativeBrowser

商务合作 / 授权咨询:startechnology1994@163.com

可视化展板-Echarts Echarts 1.数据可视化 借助图像化手段,清晰有效地传达与沟通信息。 将数字转换成图形。 阅读详情

相关推荐

【Echarts地图开发全流程加全套代码】

echarts地图开发的相关细节、避坑问题(迁徙线、自定义图标、涟漪图等个性化配置)

m0_60623820的博客 1417

UE实现数字孪生

最近需要做数字孪生项目,从头学起,这里整理一下资料。

weixin_47373639的博客 1万+

基于echarts+js+fexible.js实现的数据可视化适配案例(附源代码)

数据可视化 :借助于图形化手段,清晰有效地传达与沟通信息ECharts:是一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖矢量图形库ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。数据可视化场景:ECharts使用五部曲:步骤一:下载并引用echarts.js文件:https://echarts.apache.org/zh/index.html 步骤二:准备一个具备大小的DOM容器 步骤三:初始化echarts实例

m0_53619602的博客 5032

vue项目中使用echarts 地图 自定义图标

vue项目中使用echarts 地图 自定义图标 在开发过程中,需要做一个数据可视化的大屏展示,其中有一个模块用到了 echarts的地图,自定义图标展示相关内容。 大概效果图如下: 步骤如下: 1.下载并引入echarts npm install echarts --save 在需要的使用echarts的文件中引入 import echarts from 'echarts' import 'echarts/extension/bmap/bmap' import imgUrl from '@/asset

小肉包的博客 3427

echarts区域图根据经纬度使用自定义图片打点,鼠标移入打点图标,改变打点图标图片,且tooltip的显示不受影响。

echarts地图,使用经纬度打点,打点图标使用本地图片。鼠标移入打点图标上,打点图标切换成另一张图片。tooltip使用代码调用显示/隐藏

m0_61174356的博客 3033

Cadence Allegro 17.4学习记录开始01-原理图Capture CIS 17.4

Orcad的学习记录

qq_31444421的博客 1万+

ECharts数据可视化

ECharts,一个使用 JavaScript 实现的开源可视化库,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

super码力的博客 5725

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4538

echarts 地图显示(定位图标)

var myChart= "";//全局定义 myChart= echarts.init(document.getElementById("companydistributed")); function initCompanyMapChart() { var dataList = []; var legendData = []; $.ajax({ url: "<%=request.getCo.

weixin_44101779的博客 4088

电驱系统功率级“多合一”解决方案

如何提升电驱动系统的产品性能、减小能耗和进一步轻量化,以加强整车市场竞争力,是摆在国内外新能源车企面前的共同课题。为此,具有多年动力总成电子系统开发经验的美国著名半导体及电子解决方案专家——德州仪器(Texas Instrument)提出了多种功率级别“多合一”整合方案和设计思路,助力新能源车企提升技术优势。

yessunday的专栏 1370

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4691

数据可视化ECharts知识点

flexible.js:是淘宝开发出的一个用来适配移动端的js框架。根据不同的width给网页中html根节点设置不同的font-size,然后所有的px都用rem来代替,这样就实现了不同大小的屏幕都适应相同的样式了。cssrem插件:在插件内设置好 x rem = y px,当我们在文件中输入任意px时,会帮我们自动转换为相应的rem。主要配置:series,xAxis,yAxis,grid,tooltip,title,legend,color。屏幕适配:对于不同尺寸的屏幕,页面可以自适应的等比例缩放。

abcd661054026的博客 1153

ESP32 CAM安装配置 第四部份:通过使用ESPHome的方式ESP32 Cam加到HomeAssistant

这些包括 aec_value, aec2, ae_level, agc_gain, gain_ctrl, bpc, wpc, raw_gma, lenc, hmirror, dcw, colorbar 等。这些参数的可能值和具体效果会根据你的摄像头硬件和 ESPHome 的版本有所不同。在 ESPHome 中配置 ESP32 Cam 时,每个参数的可能值取决于具体的功能和支持范围。值的范围是 0 到 63,其中 0 是最差质量,63 是最佳质量。horizontal: 水平校正的强度,通常是一个数字值。

weixin_42895252的博客 3364

关于微信小程序中如何实现数据可视化-echarts动态渲染

移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能。

分享互联网的有趣知识~ 3575

CPG控制网络入门

从线性变换开始推导

妖米的博客 5043

uniapp监听扫码枪键盘事件|无输入框式监听

一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备。当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup。

tcy9099的专栏 9748

ECharts 柱状图 改变柱子颜色+柱子上方显示文字与图标

ECharts,对柱状图进行一些自定义: 1.柱子颜色自定义 2.柱子上方显示文本 3.柱子上方显示图标 具体代码如下: <template> <div> <div id="main" style="width: 1000px;height:600px;"></div> </div> </templa...

panzina的博客 1万+

Silvaco TCAD 2018安装后,如何配置TonyPlot 5.0.22.R并解决绘图报错?

本文详细介绍了在Windows系统上安装Silvaco TCAD 2018后,如何正确配置TonyPlot 5.0.22.R并解决常见的绘图报错问题。内容包括版本兼容性分析、环境变量设置、常见错误解决方案以及性能优化建议,帮助用户顺利完成仿真结果的可视化工作。

weixin_31031711的博客 418

数据可视化——echarts

应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。常见的数据可视化库D3.js目前Web端评价最高的Javascript可视化工具库(入手难)ECharts.js百度出品的一个开源Javascript数据可视化库Highcharts.js国外的前端数据可视化库,非商用免费,被许多国外大公司所使用AntV蚂蚁金服全新一代数据可视化解决方案等等ZRender定制。折线图、、、......

qq_52301431的博客 2004

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

echarts数据可视化大屏(vue3+echarts)

Echarts 结合vue3实现数据可视化大屏

HBR666_的博客 3145

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ECharts如何制作省份地图并在地图上显示自定义图标/散点图

之前一直被客户提的一个需求烦恼着,他要只显示某个省份的地图,并且呢要在地图上显示小车的图标,还有其它一些点的信息。我以前只用过echarts做过图表,没做过地图,所以自己也是网上看了很多并且看了很多api文档,最后总算是搞出来了,在这里留个笔记方便自己也方便别人。 步入正题之前需要下几个文件 echats的js文件,自己可以去官网上下 地图省份的数据 (可能有的省份不对),这是我的 网盘地址: 密...

东东东东东辉 6966

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JQuery+webpack+echarts构建可视化开发环境

数据可视化就越来越受重视,而一般的可视化的需求可能仅仅只是一个大屏展示,这就意味着我们没必要为一个大屏展示的项目引入一整套前端框架,而是使用jq就够了,因为成本最低,开发上手最快,接下来就分享下最近研究的jq+webpack+echarts构建的可视化开发环境   首先是我的项目结构   语法使用es6编写,关于es6的配置就不多说了   可视化用echarts还是比较方便,在这之前也看了

zhangl的博客 2481

echarts实现数据可视化

在实际工作中,对于数据的处理常常需要对数据进行可视化的操作,本文针对日常需要总结了echarts的使用姿势 echarts的常规使用 根据项目的需要选择合适的可视化图标,引入echarts包 设定我们需要的图形type类型: bar 柱形图 pie 饼图 ... 设定特定的类型以后对数据进行加工,得到我们需要的数据格式,如果需要对可视化图形做进一步的组合拓展可以通过r...

Alison_Z的博客 2576

Vue ECharts自定义系列图标:使用SVG与图片丰富图表展示

你是否还在为图表中单调的默认标记点发愁?是否希望将品牌LOGO、自定义插图融入数据可视化中?本文将系统讲解如何在Vue ECharts项目中实现SVG与图片自定义图标,通过12个实战案例和完整代码,帮助开发者打造兼具数据表现力与视觉吸引力的图表界面。读完本文你将掌握:SVG路径解析与图表集成、本地图片资源引用技巧、动态图标交互实现、跨设备图标适配方案四大核心技能。 ## 技术基础:自定义图标的实...

gitblog_00546的博客 930

ECharts数据可视化:ECharts介绍及其基础配置

文章目录1. 常见的数据可视化库2. 概述3. 入门案例 1. 常见的数据可视化库 D3.js 目前Web端评价最高的 JavaScript 可视化工具库(入手难) ECharts.js 百度出品的一个开源 JavaScript 数据可视化库 Highcharts.js 国外前端数据可视化库,非商用免费,被许多国外大公司所使用 AntV 蚂蚁金服全新一代数据可视化解决方案 Highcharts.js 和 ECharts 就像是 Office 和 WPS 的关系 2. 概述 ECharts,一个使用Jav

Continue的博客 1396
上一篇: 小伙伴,都2026年了,UE开发者的工作方式该变一变了
下一篇: UE如何与Vue技术结合使用
StarTechnology
博客等级 码龄96天 1粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值