96SEO 2026-02-19 10:39 41
三维绘图可视化图表组件类似matplotlib-CSDN博客文章浏览阅读707次点赞8次收藏9次。

在数据科学和工程领域数据可视化是理解和交流复杂信息的关键工具。
如果您是一位Java开发者寻找一个强大的、本地化的三维图形绘图库那么Matplot3D
JAVAV5.0值得你关注。
该组件旨在为Java开发者提供类似于Python中Matplotlib的三维绘图功能让Java也能轻松绘制出令人印象深刻的3D图形图表。
https://blog.csdn.net/tanling8334/article/details/137752605?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137752605%22%2C%22source%22%3A%22tanling8334%22%7D
这是一个纯JAVA实现的类似matplotlib可视化三维库内含纯java实现的3维软引擎封装为一个jar包jar文件大小只有200多KB直接引用即可。
无需再安装和配置第三方库或者环境无需依赖OpenGL、DriectX、JAVA
https://gitee.com/tanling8334/Matplot3D-for-Java
https://github.com/tanling8334/Matplot3D-for-Java
的处理器Processor是一类对象它们的作用是将数据转换成对应图表的三维模型负责数据处理和建模无需使用者直接编写具体模型的代码只需要将数据加入到处理器中再通过Matplot3D4JMgr对象将图表直接在绘制到界面上或者输出为图像文件即可。
一个Matplot3D4JMgr对象可以“持有”多个不同类型的处理器对象。
DataGridProcessor是数据网格处理器可以绘制连续的曲面。
数据网格是指一个在xy方向都均匀排列的点阵列。
使用一个Double[][]表示数据数组中的值为z高度值。
x,y方向由于均匀分布在指定了各自的取值范围后即可换算为空间坐标的x,y坐标。
需要注意的是Double[][]中存放的为数据和显示的分段数不一定相等譬如说数据数组是100*100的但3维曲面模型的分段数可以使90*80。
//数据阵列//......准备数据//向pricessor对象加入数据
DataGridProcessor();Matplot3D4JMgr
//----------以下生成一些演示数据Double[][]
{if(ij20)datas[i][j](double)ijrandom.nextDouble();else
datas[i][j]40d-i-j-random.nextDouble();}}processor.setClose3DObject(true);
//设置是否是封闭三维对象mgr.setScaleZ(1.2);
//z方向伸拉至原始的1.2倍mgr.setTitle(Demo
数据阵列);processor.setShowGrid(false);//不显示辅助网格线//创建一个颜色风格ColorStyle
TopBottomColorStyle(ColorStyle.DEFAULT_COLORS_ARRAY);processor.addData(datas,
设置是否封闭三维对象如果为false则只显示数据曲面如果为true则将曲面、和自适应的水平的矩形平面和四周的垂直面将三维图形围蔽。
加入一组数据阵列数据并指定x,y范围显示分段,颜色和不透明度。
参数说明如下
1、data:数据阵列二维数组第一个下标代表X方向,第二个下标代表Y方向
最为参填充而不是用一种纯色填充。
注意参数的顺序是和上面的方法不一样的。
现在我们来写一个稍微高级一点点的栗子绘制高程地形图。
就像下面这样
是不是看起来还挺酷的实际上DataGridProcessord的使用方法和上面简单的栗子并没有多少差别差别在于数据。
同时根据数据的分布密度设置合理的分段数进行建模和绘制。
需要特别指出的是由于这是一个JAVA纯软件实现的三维引擎完全依靠JVM和CPU运算以及靠内存存储数据当模型数据过多时会占用较多内存“刷新时”也会占用较多CPU时间。
所以根据自己电脑的实际配置和性能来决定模型的精细度。
根据我的4年前的破电脑的使用经验如果是需要实时刷新我觉得最好把模型的片面数控制在10W个以内例如分段数设定为300*300时模型的片面数就会超过9W个。
大家可以根据自己电脑的实际配置测试一下在可接受的刷新效率下的极限精细度。
关于性能方面的底层问题我还在还在持续改进中看看使用CPU计算时JAVA的极限能达到什么程度。
言归正传地形数据怎么生成。
首先从互联网上找到高程数据高程数据一般都是测绘卫星测绘获得的有多种格式大家有兴趣可以研究研究。
我是从下面这个网站下载高程数据的
http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm
选择某一个方格可以下载那一区域的高程数据下载后解压可以得到一堆后缀是
.hgt的文件。
文件是以一个方格区域的右上角的经纬度命名的每个文件代表的方格跨度分别是经度的1度和纬度的1度。
例如N08E036.hgt文件包含的就是北纬8度到北纬9度东经36度到东经37度这一区域的地形高程数据。
每个文件的大小是一致的共包含1442401个采样点的高程数据可以看到每个文件的大小是2884802字节就是说每个采样点数据占用了两个字节。
同时可以按照地球的半径换算结果大约是90m,也就是说这些hgt文件的数据精度是90米。
每一个文件涵盖的区域长宽大概是108km而我们知道地球最高的海拔也只有8800多米所以整块绘制体现不出地形高度起伏可以只提取其中的一个子区域绘制。
文件其中300*300个点表示的区域进行绘制。
这个区域位于喜马拉雅山脉因此地形起伏会比较明显。
{dio.read(buf);if(ioffsetU||ioffsetUcountU)continue;for(int
{if(k/2offsetV||k/2offsetVcountV)continue;datas[x][y](double)((buf[k]
0xff));y;}y0;x;}dio.close();return
接下来是主程序因为我们需要取纵横300个点按照点间90米计算跨度大约为27公里因此绘图范围的跨度应该设置为27000分段数可随意这里设置为270使片面数不至于很大。
主程序如下
readHgtFile(./demo_data/N27E086.hgt,139,100,301,300);DataGridProcessor
DataGridProcessor();Matplot3D4JMgr
Matplot3D4JMgr(processor);mgr.setTitle(高程地形);mgr.setShowReferencePlanes(false);
//不显示坐标系processor.setShowGrid(false);
//不显示网格线processor.addData(datas,
1f);processor.setClose3DObject(true);mgr.show();}
是不是已经有点意思了。
但是颜色只有灰色我们希望可以根据高度显示不同的颜色就是高度用颜色也能体现出来。
还有高光感看起来感觉有一点像金属表面。
那么就做一下细节调整。
用颜色数组创建ColorStyle对象并在添加数据时设置同时关闭高光渲染。
调整代码调整如下
{Color.BLUE,Color.GREEN,Color.YELLOW,Color.RED.brighter(),Color.RED.darker()});processor.addData(datas,
1f);processor.setHighlight(false);
方法的参数顺序和使用Color作为参数的方法是不一样的效果如下
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback