如何在MagicDraw中不依赖MATLAB绘制3D散点图?
解决方案:MagicDraw 不透明语言绘制3D散点图(非MATLAB方案)
一、原代码报错原因分析
你遇到的unable to resolve class Plot3DPanel错误主要来自三个问题:
- Jar包未被正确加载:MagicDraw仅在启动时加载
lib目录下的Jar包,放入jmathplot.jar后未重启软件,导致类无法被识别。 - 依赖缺失:
jmathplot依赖jfreechart.jar和jcommon.jar,仅放入单个Jar包无法满足类加载要求。 - 脚本写法不符合MagicDraw执行逻辑:不透明行为中的Groovy是直接执行脚本内容,无需包裹类和
main方法,原代码的类结构会导致核心逻辑未被触发。
二、修复jmathplot方案步骤
1. 准备完整依赖包
将以下Jar包放入MagicDraw安装目录的lib文件夹:
jmathplot.jarjfreechart.jarjcommon.jar
2. 重启MagicDraw
确保Jar包被加载到类路径中。
3. 修改Groovy脚本(直接执行版)
删除类和main方法,直接编写执行代码,同时替换窗口关闭逻辑避免误关MagicDraw:
import org.math.plot.Plot3DPanel import javax.swing.JFrame // 替换为活动图中获取的实际数据 double[] x = [1, 2, 3, 4, 5] as double[] double[] y = [5, 4, 3, 2, 1] as double[] double[] z = [10, 20, 30, 40, 50] as double[] Plot3DPanel plot = new Plot3DPanel() plot.addScatterPlot("3D Scatter Plot", x, y, z) plot.setAxisLabel(0, "X Axis") plot.setAxisLabel(1, "Y Axis") plot.setAxisLabel(2, "Z Axis") JFrame frame = new JFrame("3D Scatter Plot Example") frame.setContentPane(plot) frame.setSize(600, 600) frame.setVisible(true) // 使用DISPOSE_ON_CLOSE,关闭图表时不终止MagicDraw进程 frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
三、更稳定的内置Jar方案(利用MagicDraw自带jide-charts)
你发现的jide-charts-3.7.12.jar是MagicDraw内置的图表库,无需额外导入Jar包,兼容性更好,直接使用以下代码:
import com.jidesoft.chart.Chart3D import com.jidesoft.chart.ChartPanel import com.jidesoft.chart.model.DefaultChartModel import com.jidesoft.chart.render.ScatterRenderer3D import javax.swing.JFrame // 从活动图输入引脚获取数据的话,可直接替换此处的示例数据 def scatterData = [ [1, 5, 10], [2, 4, 20], [3, 3, 30], [4, 2, 40], [5, 1, 50] ] // 创建3D图表模型 DefaultChartModel model = new DefaultChartModel() scatterData.each { point -> model.addPoint(point[0], point[1], point[2]) } // 配置3D散点图渲染器 Chart3D chart = new Chart3D(model) chart.setRenderer(new ScatterRenderer3D()) chart.setXAxisLabel("X Axis") chart.setYAxisLabel("Y Axis") chart.setZAxisLabel("Z Axis") chart.setTitle("SysML 3D Scatter Result") // 窗口显示设置 ChartPanel panel = new ChartPanel(chart) JFrame frame = new JFrame("Built-in 3D Scatter Plot") frame.setContentPane(panel) frame.setSize(600, 600) frame.setVisible(true) frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
四、活动图数据对接提示
若要将活动图中其他行为的结果传入图表:
- 在不透明行为的输入引脚定义变量(如
xData、yData、zData,类型匹配数据结构) - 在Groovy脚本中直接使用这些变量,替换示例中的硬编码数据
内容的提问来源于stack exchange,提问作者nobody
相关产品推荐
相关产品推荐

