如何将AnyLogic敏感性分析图表图例设置为升序排列?
解决敏感性分析图表图例升序排列问题
核心问题分析
你输入的数据集本身是升序,但调用sortAscending()未生效,大概率是排序时机不对——需要在所有数据集添加完成后再执行排序操作,而非添加过程中单独调用。
具体解决方案
调整排序时机
先完成所有addDataSet调用,确保所有数据集都已加载到图表中,再调用排序方法:// 循环完成所有数据集添加(你的原有代码逻辑) Color color = lerpColor( (getCurrentIteration() - 1) / (double) (getMaximumIterations() - 1), blue, red ); chart0.addDataSet( root.childDS, format( root.childgoal ), color, true, Chart.INTERPOLATION_LINEAR, 1, Chart.POINT_NONE ); // 所有数据集添加完毕后执行排序 chart0.sortAscending();手动排序图例项(如果内置方法失效)
若sortAscending()仍不生效,可手动获取图例项列表,按标签规则排序后重新设置:// 获取当前图例项集合 List<LegendItem> legendItems = chart0.getLegend().getItems(); // 按标签文本升序排序(字符串默认排序) Collections.sort(legendItems, (itemA, itemB) -> itemA.getLabel().compareTo(itemB.getLabel())); // 重新设置排序后的图例项 chart0.getLegend().setItems(legendItems);处理数字标签的特殊排序
如果图例标签是数字转成的字符串,默认字符串排序会出现"10"排在"2"前的问题,需转成数值类型比较:Collections.sort(legendItems, (itemA, itemB) -> { // 将标签转为Double类型后比较 double valA = Double.parseDouble(itemA.getLabel()); double valB = Double.parseDouble(itemB.getLabel()); return Double.compare(valA, valB); });
内容的提问来源于stack exchange,提问作者Alastair
相关产品推荐
相关产品推荐

