`
tanling8334
  • 浏览: 3555 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Matplot3D for JAVA 【V5.0】发布 :一个纯JAVA开发的数学科学数据可视化组件,JAVA 三维绘图(可视化图表)组件,类似matplotl

 
阅读更多

 Matplot3D for JAVA概述 

在数据科学和工程领域,数据可视化是理解和交流复杂信息的关键工具。如果您是一位Java开发者,寻找一个强大的、本地化的三维图形绘图库,那么Matplot3D for JAVA(V5.0)值得你关注。该组件旨在为Java开发者提供类似于Python中Matplotlib的三维绘图功能,让Java也能轻松绘制出令人印象深刻的3D图形图表。Matplot3D for JAVA

 

Matplot3D for JAVA(V5.0) 是一个基于JAVA SE环境开发的三维图形图表组件。 组件由纯JAVA SE 实现(Pure Java) ,封装为一个jar包,jar文件大小只有300多KB。内含自主研发的软件三维几何造型和绘制算法,无需依赖OpenGL、DriectX、JAVA 3D或JAVAFX等等第三方库,其只依托JRE自带的默认类库即可(即只需安装了JAVA就可使用)。

Matplot3D for JAVA提供简洁明了的API设计,这使得即使是没有太多数据可视化工经验的开发者也可以快速上手构建出交互式的可视化应用。可用于大数据可视化、科学数学数据分析可视化等领域。它利用Java的自带的GUI框架构建界面同,确保了良好的跨平台兼容性同时能方便的集成到自己JAVA GUI程序中。也可以在服务端直接生成图片对象或文件,用于动态Web页面显示。

 


应用场景

  • 教学和研究:用于展示数学模型、物理现象和数据等。
  • 数据科学:在数据分析过程中可视化三维数据,帮助发现潜在模式。
  • 其他需要数据可视化的Java应用和系统

 


组件下载及项目地址:        

 


包文件说明

Matplot3d_4j_sydh_x64_V5.0.jar 为应用所需要依赖的包,仅将此包文件导入项目即可使用。(需要JAVA1.8 64bit 或以上,建议在JAVA17,JAVA21等LTS版本上使用或运行)


Matplot3d_4j_sydh_x64_V5.0_demo.jar 为演示DEMO的可执行的JAR文件,内含展示效果及部分示例代码 ( 使用时不需要引用这个包! )。在安装有64bit的JRE的电脑上一般双击运行即可(或者用命令行或批处理文件运行 ,运行的命令是:  "C:\Program Files\Java\....你的java安装根目录...\bin\java.exe" -jar Matplot3d_4j_sydh_x64_V5.0_demo.jar)。

 


V5.0 更新

v5.0版本的更新时一个较大的版本更新,更新内容主要包括:

  • 优化底层引擎算法,使之有更好的执行和刷新效率。
  • 重构部分了API,包括各处理器类和动画相关API等。
  • 增加实现画面发光效果的相关算法
  • 增加了网格映射曲面处理器(GridMeshProcessor),可以绘制复杂函数表达的映射曲面
  • 增加矢量场流线处理器(VectorFieldProcessor),可绘制空间矢量场的流线分布图和动画
  • 增加简单几何体处理器(Simple3DElementProcessor),可绘制长方体、柱体、椎体等。
  • 移除原FunctionProcessor类,其功能完全合并至DataGridProcessor类中。

 


样例展示

C60分子结构

Matplot3D for JAVA

 

网格映射曲面图

    Matplot3D for JAVA可用于绘制网格曲面,可以由两个独立自变量组成的经纬网格,通过映射函数映射到空间而形成的曲面

Matplot3D for JAVA

    莫比乌斯环曲面demo代码:

public class MobiusStripDemo {
	public static void main(String[] args) throws Exception {

		GridMeshProcessor processer = new GridMeshProcessor();

		Matplot3D4JMgr matPlot3DMgr = new Matplot3D4JMgr(processer);

		GridMeshMapper f = new GridMeshMapper() {

			public Point3D f(double d1, double d2) {

				double sita = d1;
				double offset = d2;

				double baseR = 12;// 半径

				double r = 3.6 * Math.cos(sita * 3 / 2) + baseR;

				double fai;// 自旋角

				fai = sita * 1.75;// 自旋角是方位角的1.75

				double x = (r + (offset * Math.cos(fai))) * Math.cos(sita);
				double y = (r + (offset * Math.cos(fai))) * Math.sin(sita);
				double z = offset * Math.sin(fai) + 3.6 * Math.sin(sita * 3 / 2);

				return new Point3D(x, y, z);
			}

			public void setAdditionalPrar(Object additionalprar) {}
		};

		double[] sita = FunctionSpaceUtil.lineSpace(0, Math.PI * 4, 300);

		double[] offset = FunctionSpaceUtil.lineSpace(-3.1, 3.1, 5);

		processer.addData(f, sita, offset, "1",new TopBottomColorStyle(ColorStyle.DEFAULT_COLORS_REVERSE_ARRAY) ,1f);

		matPlot3DMgr.setCoordianteSysShowType(matPlot3DMgr.COORDINATE_SYS_ALWAYS_FURTHER);
		matPlot3DMgr.setTitle("Mobius strip demo");

		matPlot3DMgr.show();
	}
}

  

 矢量场流线图

    Matplot3D for JAVA可用于近似模拟生成空间矢量场的流线分布图。

Matplot3D for JAVA

Matplot3D for JAVA

 

   简单样例代码

public class SimpleVectorFieldDemo {
	public static void main(String[] args) {

		VectorFieldProcessor processer = new VectorFieldProcessor();

		Matplot3D4JMgr matPlot3DMgr = new Matplot3D4JMgr(processer);

		Vector3D v1 = new Vector3D(1, 0, 0);
		Vector3D v2 = new Vector3D(-0.1, 0, 0);
		Vector3D vNull = new Vector3D(0, 0, 0);

		class MyMapper1 implements Point3dVector3dMapper {
			public Vector3D f(Point3D p) {
				if (p.y() > 0) {
					return v1;
				} else {
					return vNull;
				}
			}

			public void setAdditionalPrar(Object additionalprar) {}
		}

		class MyMapper2 implements Point3dVector3dMapper {
			public Vector3D f(Point3D p) {
				if (p.y() < 0) {
					return v2;
				} else {
					return vNull;
				}
			}

			public void setAdditionalPrar(Object additionalprar) {}
		}

		processer.addData(new MyMapper1(), "1", Color.RED, new Range(-9, 9), new Range(-9, 9), new Range(-9, 9));

		processer.addData(new MyMapper2(), "2", Color.BLUE, new Range(-9, 9), new Range(-9, 9), new Range(-9, 9));

		List<Point3D> seeds = new ArrayList<Point3D>();

		for (double z = -9; z <= 9; z += 1.2) {
			for (double y = -9; y <= 9; y += 1.2) {
				seeds.add(new Point3D(0, y, z));
			}
		}

		processer.setPropertyToAll("seeds", seeds);
		processer.setPropertyToAll("alphaNoise", 0.0);

		matPlot3DMgr.setTitle("矢量场流线");
		matPlot3DMgr.setAppearanceTheme(Matplot3D4JMgr.APPEARANCE_THEME_DARK);

		matPlot3DMgr.showMotion(-1, 15, 0);
	}
}

数据阵列网格曲面

    Matplot3D for JAVA 可以用于生成以xy方向均匀分布高程点阵组成的网格或连续曲面 ,可用于绘制高程图等。

Matplot3D for JAVA

    函数曲面demo代码:

public class FunctionSurfaceDemo {
	public static void main(String[] args) {

		DataGridProcessor processor = new DataGridProcessor();
		
		final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);		

		//定义二维函数,根据xy值求y值
		Function f = new Function() {
			public Double f(double x, double y) {
				return Math.sin(y * x / 2.2) * 0.8;
			}
		};

		double pi = Math.PI;

		//将二维函数加入处理器,设置XY方向显示范围和采样分段数
		Range rangeX = new Range(-1.5 * pi, 1.5 * pi);
		Range rangeY = new Range(-1.5 * pi, 1.5 * pi);

		// 将二维函数加入处理器,设置XY方向显示范围和采样分段数
		processor.addData(
            FunctionSpaceUtil.getDataByFunction(f, rangeX, rangeY, 200, 300), 
            "", rangeX, rangeY, new TopBottomColorStyle(), 1f);
		
		processor.setPropertyToAll("isDoubleSide", true);
		processor.setPropertyToAll("isShowGrid", false);

		mgr.setScaleZ(1.5);
		mgr.setScaleX(1.3);
		mgr.setScaleY(1.3);

		mgr.setTitle("Demo : 函数曲面绘制   [ z =  0.8 * sin(y*x/2.2) ]");

		mgr.setCoordianteSysShowType(mgr.COORDINATE_SYS_ALWAYS_FURTHER);

		mgr.show();
}

 

曲面云图

    Matplot3D for JAVA可绘制曲面云图。“云图”包含xyz三个空间量以外还会显示第4个独立的标量(例如温度、压强、流速率等等)的分布,第4个量强弱由颜色序列来表示。

Matplot3D for JAVA

   

    简单样例代码:

public class ContourDataGridDemo {
	public static void main(String[] args) {
		
		ContourDataGridProcessor processor = new ContourDataGridProcessor();
		
		Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);		
		
		//=======================================
		//准备你的高度数据,是一个二维Double数组。表示均匀分布的网格点,数组内的值表示高度
		//数据一般来源于具体应用的非规则函数数据,例如某区域的DEM地形高程数据
		//以下代码创造一些虚拟数据用于展示如何使用
		
		Double[][] datas=new Double[100][100];
		
		for(int i=0;i<datas.length;i++) {
			for(int j=0;j<datas[0].length;j++) {
		
				datas[i][j]=-0.1*Math.pow(100d-i-j,2)+1000;
				
			}
		}

		//=======================================
		//准备你的显示数据values,是一个二维Double数组,。表示均匀分布的网格点,数组内的值表示非xyz的第四维标量数据
		//values的行列分布可以不与datas一致,但建议最好一致以优化显示效果
		//以下代码创造一些虚拟数据用于展示如何使用
		
		Double[][] values=new Double[50][50];
		for(int i=0;i<values.length;i++) {
			for(int j=0;j<values[0].length;j++) {
				double temp=Math.sqrt(Math.pow(i-25d,2)+Math.pow(j-25d,2));
				values[i][j]=temp;
			}
		}

		Color baseColor=Color.GRAY;//云图需要一个基色
		
		processor.addData(datas, values,baseColor, "my_name", new Range(0, 100), new Range(100, 200), 20, 20, 1f);
		
		processor.setClose3DObject(true);//设置是否是封闭三维对象

		mgr.setCoordianteSysShowType(Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);
		
		mgr.setScaleX(5);
		mgr.setScaleY(5);
		mgr.setScaleZ(0.2);

		mgr.setTitle("曲面云图简单样例");
		
		mgr.show();
	}
}

 

通用网格曲面

    Matplot3D for JAVA 可绘制难以用函数关系表示的自定义的网格或者多边形,可通过输入顶点的位置、小三角形或者四边形单元信息来组合成复杂三维图形 。

Matplot3D for JAVA

 

三维散点图

    Matplot3D for JAVA 可用于绘制分组散点图或者显示点云。

Matplot3D for JAVA

   

    散点图demo代码:

public class ScatterDemo {

	public static void main(String[] args) throws Exception {
	
		ScatterDataProcessor processor = new ScatterDataProcessor();

		final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);		

		//*************************************************************//
		//在此准备数据,将Point3D对象放入List<Point3D>容器中
		List<Point3D> dos1=new ArrayList<Point3D>();
		List<Point3D> dos2=new ArrayList<Point3D>();
		List<Point3D> dos3=new ArrayList<Point3D>();
		
		Random ram=new Random();
		
		for(int i=0;i<100;i++) {
			
			dos1.add(new Point3D(ram.nextDouble()+1,ram.nextDouble(),ram.nextDouble()+1));
			dos2.add(new Point3D(ram.nextDouble()+1,ram.nextDouble()+1,ram.nextDouble()));
			dos3.add(new Point3D(ram.nextDouble(),ram.nextDouble()+1,ram.nextDouble()));
		}
		
		//加入第一组数据
		processor.addData("Item 1", dos1);
	    
		//加入第二组数据
		processor.addData("Item 2", dos2);
		
		//加入第三组数据
		processor.addData("Item 3", dos3);
		
		processor.setPropertyToAll("isShowEdge", true);
		
		mgr.setTitle("散点图");

		//坐标参考平面不会遮挡数据
		mgr. setCoordianteSysShowType( Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);

		mgr.show();
	}
}

 

简单几何体组合图形

    Matplot3D for JAVA 用于绘制圆柱、长方体等简单几何体的组合图形。

Matplot3D for JAVA

    绘制简单几何体代码:

public class SimpleElementsDemo {
	public static void main(String[] args) throws Exception {
		
		Simple3DElementProcessor processor = new Simple3DElementProcessor();

		final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);		
		
		processor.addSphere(new Point3D(-1.5,1.5,0 ), 1,39,20, Color.YELLOW);
		
		processor.addCuboid(new Point3D(1.5,1.5,0 ), 1.3,1.5,1.7, Color.GREEN);

		processor.addCone(new Point3D(-1.5,-1.5,-0.9 ), new Point3D(-1.5,-1.5,1.0 ),1,30, Color.RED);
		
		processor.addCylinder(new Point3D(1.5,-1.5,-0.9 ), new Point3D(1.5,-1.5,1.0 ),1,30, Color.BLUE);

		mgr.setTitle("简单几何体");
	    
		mgr. setCoordianteSysShowType( Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);

		mgr.show();
	}
}

 

三维瀑布图

    Matplot3D for JAVA 可用于绘制三维瀑布图

Matplot3D for JAVA

 

    简单样例代码:

public class SimpleWaterfallDemo {
	public static void main(String[] args) {
	
		Waterfall3DProcessor processer = new Waterfall3DProcessor();
		Matplot3D4JMgr mgr = new Matplot3D4JMgr(processer);

		int stepC = 300;
		double step = 0.05;

		processer.setGroupSpacing(1);//设置间距为1

		//第一组图形
		List<Point2D.Double> li1 = new ArrayList<Point2D.Double>();

		for (int i = 0; i < stepC; i++) {
			li1.add(new Point2D.Double(i * step, Math.sin(i * step)));
		}

		processer.addData("Item 1", null, li1);
		
		//第二组图形
		List<Point2D.Double> li2 = new ArrayList<Point2D.Double>();

		for (int i = 0; i < stepC; i++) {
			li2.add(new Point2D.Double(i * step, Math.cos(i * step)));
		}

		processer.addData("Item 2", null, li2);

		processer.setBaseZ(-1); 

		mgr.setScaleZ(1.5);

		mgr.show();
	}
}

 

三维柱状图

    Matplot3D for JAVA 可用于绘制三维柱状图

Matplot3D for JAVA

   

    绘制简单柱状图代码:

public class BarsDemo {
	public static void main(String[] args) {
		
		BarProcessor processor = new BarProcessor();

		Matplot3D4JMgr mgr = new Matplot3D4JMgr(processor);
		

		// ===========================================
		// 在此准备数据
		// 每组数据在一个或多个二维数组中,数组中表示柱体高度(标1表示组号,相同组号同颜色;下标2表示同组中的不同列)

		Double[][] ds1 = new Double[][] { 
                { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 },
				{ 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 },
                { 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 } 
        };

		Color c1 = Color.RED;
		Color c2 = Color.GREEN;
		Color c3 = new Color(80, 80, 255);

		Color[][] colors = new Color[][] {
                { c1, c1, c1, c1, c1, c1, c1, c1 }, 
                { c2, c2, c2, c2, c2, c2, c2, c2 },
				{ c3, c3, c3, c3, c3, c3, c3, c3 } 
        };

		Color ce = Color.BLACK;

		Color[][] ecolors = new Color[][] { 
                { ce, ce, ce, ce, ce, ce, ce, ce }, 
                { ce, ce, ce, ce, ce, ce, ce, ce },	
                { ce, ce, ce, ce, ce, ce, ce, ce } 
        };

		processor.addData("项目1", ds1,colors,ecolors);

		processor.setBarWidthX(2);
		processor.setBarWidthY(2);

		processor.setxSpace(0.2);
		processor.setySpace(1);
		processor.setSpaceInBundle(0.3);

		//自定义标签图例面板
		KeyLabelLegend legend = new KeyLabelLegend();
		legend.put("项目A", c1);
		legend.put("项目B", c2);
		legend.put("项目C", c3);

		mgr.addLegend(legend);

		mgr.setScaleZ(1.5);
		mgr.setScaleX(1.3);

		mgr.setTitle("柱状图");

		mgr.setElevation(0.2);
		mgr.setAzimuth(2.2);

		mgr.show();
	}
}

三维曲线/折线图

    绘制空间折线、曲线、线段等。

Matplot3D for JAVA

 

    简单样例代码:

public class CurveDemo {

	public static void main(String[] args) throws Exception {
	
		CurveProcessor processor = new CurveProcessor();

		final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);		
		
		List<Point3D> list=new ArrayList<Point3D>();
		
		list.add(new Point3D(0, 0, 0));
		list.add(new Point3D(0, 0, 1));
		list.add(new Point3D(1, 0, 1));
		list.add(new Point3D(1, 0.3, 0));
		list.add(new Point3D(1, 0.7, 0));
		list.add(new Point3D(1, 1, 1));
		list.add(new Point3D(0, 1, 1));
		list.add(new Point3D(0, 1, 0));
		
		processor.addData(list, "折线A", Color.RED, 1);

		mgr.setTitle("三维折线");
		
		mgr.setElevation(0.06);
		mgr.setAzimuth(0.36);

		mgr. setCoordianteSysShowType( Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);

		mgr.show();
	}
}

 

0
0
分享到:
评论

相关推荐

    T20天正电气V5.0.zip

    总结来说,T20天正电气V5.0是一款专业且全面的电气设计解决方案,它以其强大的绘图工具、智能化的设计辅助、三维可视化和高效的数据管理赢得了广大用户的信赖。通过熟练掌握这款软件,电气工程师可以大大提高工作...

    FLAC3D-5.0完整版手册3000页.pdf

    FLAC3D(Fast Lagrangian Analysis of Continua in 3 Dimensions)是一款用于三维连续体快速拉格朗日分析的软件,广泛应用于地质、土木工程以及矿业等领域,用于模拟地基、隧道、边坡等复杂地质结构的稳定性。...

    绘图软件 origin 5.0

    Origin 5.0是一款在科学计算领域广泛应用的专业级绘图软件,尤其在数据分析和可视化方面具有卓越的表现。这款软件以其强大的功能、用户友好的界面和丰富的图表类型深受科研工作者和工程师的喜爱。以下是对Origin 5.0...

    基于MFC和OpenGL三维图形的开发

    为了更好地实现三维图形的计算可视化及仿真可视化,OpenGL作为一种重要的图形渲染库,成为了众多开发者的首选工具。然而,传统的OpenGL程序往往依赖于标准C语言进行开发,这在一定程度上限制了其面向对象的能力,并...

    FLAC 2d 5.0 使用手册 英文

    FLAC 2D 5.0 的 GIIC 提供了一个强大而灵活的操作平台,使用户能够高效地进行二维岩土工程问题的分析。通过详细理解其各部分的功能和使用方法,可以充分发挥软件的强大能力,解决复杂工程问题。

    科学绘图及数据分析软件Origin8[1].1的用法参考.pdf

    总的来说,Origin 8.1是一个全面的科学数据处理和可视化工具,适用于需要深度分析和精美展示数据的科研环境。其丰富的功能和高度的灵活性使得用户可以根据具体需求定制工作流程,从而提高工作效率和研究质量。

    FLAC3D5.00培训教程.pptx

    FLAC3D 5.0是一款强大的三维地质建模与数值模拟软件,广泛应用于岩土工程、采矿工程和环境地质等多个领域。本教程主要涵盖了五个关键知识点,旨在帮助用户掌握这款软件的基础操作和高级功能。 首先,我们关注的是...

    EPS红狗安装包.rar

    首先,"Eps三维测图系统v5.0_setup_64.exe" 是EPS三维测图系统的第五版,这是一个专为64位操作系统设计的安装程序。EPS三维测图系统是一款强大的GIS软件,主要用于进行地形测绘和地理空间数据分析。它集成了三维建模...

    MATLAB概述MATLAB编程环境电子资源pdf

    - **函数和数据绘图**: 可以轻松绘制二维和三维图形,包括函数图、散点图等。 - **算法实现**: 用户可以编写自己的算法并将其集成到MATLAB环境中。 - **用户界面创建**: 提供了丰富的工具帮助用户快速创建图形用户...

    科盟交通工程CAD设计系统

    9. **可视化和渲染**:V5.0版本可能加强了可视化功能,提供高质量的渲染图像,帮助非专业人员理解复杂的交通设计方案。 10. **报告和文档**:软件应具备生成项目报告和图纸的能力,方便设计师向客户或审批机构展示...

    itkvtk开发工具的配置的信息

    **VTK**(Visualization Toolkit)是一种用于三维计算机图形学、图像处理和可视化技术的开源库。它支持广泛的平台,并被广泛应用于科学计算、医学成像等领域。 在提供的路径列表中,我们可以看到针对VTK的各种模块...

    matlab 基础知识介绍

    - **丰富的图形功能**: 提供了多种绘制二维和三维图形的方法,以及交互式数据可视化工具。 - **广泛的第三方支持**: 支持与其他语言和系统的集成,例如C/C++、Java、Python等,方便进行跨平台开发。 #### 四、...

    MATLAB基础入门教程 MATLAB使用详解 第1章 MATLAB7.0安装与卸载 共5页.pptx

    - **三维绘图**:surf、mesh等。 - **视图控制**:视角、投影方式。 - **动画制作**:动态显示三维图像。 #### 第14章 图形对象和句柄 - **图形对象**:线条、表面、文本等。 - **句柄概念**:获取图形对象的引用...

    python实现二维插值的三维显示

    在matplotlib中,使用`Axes3D`创建一个三维绘图,并使用`plot_surface()`函数绘制函数的三维表面: ```python fig = plt.figure(figsize=(9, 6)) ax = plt.subplot(1, 2, 1, projection='3d') surf = ax.plot_...

    matlab快速入门

    MATLAB,全称为Matrix Laboratory,是一个由MathWorks公司开发的高级计算环境,特别适用于数值分析、算法开发、数据可视化以及工程和科学计算。本文旨在引导初学者快速掌握MATLAB的核心概念、基本操作和高级功能,...

    滚动轴承CAD系统的开发与研究

    随着技术的进步,系统开始转向基于专业CAD/CAM/CAE软件平台,例如HP-APOLLO图形工作站上的I-DEAS5.0系统,通过集成化软件支持二维绘图和数据库管理。 现代滚动轴承CAD系统则倾向于采用Object ARX技术,这是一种由...

    MATLAB及在控制系统课程中的应用全套教学课件.ppt

    它以其强大的数值计算能力和方便的数据可视化工具而著称,广泛应用于科学研究、工程技术和教育领域。MATLAB特别适合于矩阵运算,因此非常适合于进行各种类型的数学计算和数据分析。 #### 1.1.2 MATLAB的发展历程 - ...

    MATLAB电子教程-1MATLAB基础.pdf

    3. MATLAB图形系统:基于句柄图形的MATLAB可以实现二维和三维数据的可视化、图像处理,并能够对图形窗口进行完全或局部修改,同时也方便了图形界面的设计。 综上所述,MATLAB从一个简单的矩阵运算软件,发展成为集...

Global site tag (gtag.js) - Google Analytics