2014-11-03 44 views
1

我有一个时间堆栈图,其数据集可以通过单击单选按钮进行更改。模型运行时,当单击单选按钮时,图表会立即更新其外观。但是,当模型暂停时,单击单选按钮时图表的区域将变为空白;相反,图例自动更新。我如何手动强制图表区域重绘自己?模型暂停时如何获取图表来重绘自己?

回答

2

如果暂停模型中,只有AnyLogic中的一部分实际上是暂停。处理GUI的线程继续运行,这就是为什么您可以在模型暂停时浏览模型的原因。 这也意味着如果您尝试在模拟暂停时更新图表数据,外观将会刷新,但是 - 当您的数据正在当前暂停的另一个线程中更新时,它将不会收到该数据。

如果您想要暂停模拟并仍然能够切换图表中显示的数据,可以查看机场示例模型。它提供了一种很好的方法,可以通过使不同图表可见/不可见并调整宽度,高度,x和y来切换。从本质上讲,您可以制作所需的所有图表,将它们完美重叠,然后使您目前感兴趣的图表可见。

如果要以编程方式创建图表,除了使用例如new TimeStackChart(...)创建图表之外,还必须将其添加到main.presenation.add(...)的顶级展示组。如果您不这样做,图表将永远不会出现在模型中,因为模型不会显示任何内容!若要查找有关如何以编程方式创建图表的更多信息,请在Main中制作图表,然后在Java编辑器中打开Main。找到您创建的图表,查看它的构造函数(有很多参数!),并将其用作您希望创建的图表的粗略模板。帮助文档将进一步理解您看到的参数。

+0

我们有客户希望在模型完成或暂停时查看各种人群的可视化。例如,假设模型完成,他们正在查看火星人口中的男性人数。现在他们想看到海王星人口中的女性人数。当我切换数据集时,图表不会刷新。我知道图表通常更新自己的数据,但是当我以编程方式切换数据集时,图表是否应该看到有新数据,或者线程中是否有逻辑? – 2014-11-04 16:42:51

+1

如果您处于暂停模式,我不认为图表会看到新的数据集。但您可以尝试 .update()或 .updateData() [link] http://www.anylogic.com/anylogic/help/index.jsp?topic=/com.xj.anylogic.help/ HTML /分析/酒吧%20Chart.html 如果不起作用。我建议看看机场的例子。他们使用不同的方法,在那里交换图形而不是数据集。所以这个图已经绘制出来了...... – 2014-11-05 08:36:59

+0

'update()'和'updateData()'都不起作用,这有点违反直觉。我会尝试机场的例子。 – 2014-11-05 17:14:26

0

您是否试过chart.refresh();方法? 也尝试使用agent.onChange()更新嵌入代理。

希望帮助

+0

我试过chart.refresh(),但没有奏效。我忘记了agent.onChange()。我会给你一枪! – 2014-11-04 16:43:08

+0

'onChange()'似乎不起作用,不幸的是。它不存在于图表中,并且在Main代理上调用'onChange()'也不会执行任何操作。 – 2014-11-04 17:16:53

0

我遇到了完全相同的问题,并提出了解决方法。

试试这个,这是我知道的AnyLogic V7作品:

if (getEngine.getState() == getEngine().PAUSED){ 

    dynChart.setSelectedItemIndices(new int[]{0}); 

    dynChart.setSelectedItemIndices(null); 

} 

我能得到图表暂停或选择/取消传说项目之一完成后手动刷新。我花了几个小时尝试API的变化无济于事,所以我只是模仿在UI中实际工作并且工作。

我正在动态生成一个文本项目作为图表标题,但我没有同样的运气让图标在暂停时刷新文本。对此有任何想法?

+0

我不能说我尝试在图表中刷新文本。也许@Nikolaj可以提供帮助?您可能想要提出一个新问题以获取社区的反馈意见。在答案中提出问题不太可能让你找到你想要的答案。 :) – 2015-01-16 18:32:56