JFreeChart BarChart - 类别标记

时间:2012-07-06 13:43:12

标签: java jfreechart bar-chart markers

我正在创建一个包含多个频段作为类别轴的BarChart。我想要做的是显示这些频段的可见分组:

例如:

Freq x1~Freq x2 = Band y(因此域轴具有类别x1,x1.1,x1.2到x2的值) 频率x3~Freq x4 =频带z(x3,x3.1 ...... x4)

我想要做的是在图表中显示Band Y和Band Z的标记。请注意,根据我可能获得的数据集,并非所有类别都可能存在。比方说,对于第一个例子,我有x1到x1.6的值,所以带标记从x1到x1.6

我希望我能解释一下我的要求。这可能在JFreeChart中吗?如果是这样,我该如何实现这一目标呢?

只是为了澄清一点,here's a picture我希望实现的目标:enter image description here

1 个答案:

答案 0 :(得分:4)

您的乐队是否与类别相对应?如果他们这样做,您可以使用CategoryMarker

CategoryMarker marker = new CategoryMarker("Category 3");
marker.setLabel("Band Y");
marker.setPaint(Color.red);
marker.setOutlinePaint(Color.red);
marker.setAlpha(0.5f);
marker.setLabelAnchor(RectangleAnchor.TOP);
marker.setLabelTextAnchor(TextAnchor.TOP_CENTER);
marker.setLabelOffsetType(LengthAdjustmentType.CONTRACT);
plot.addDomainMarker(marker, Layer.BACKGROUND);

Bar Chart With CategoryMarker

我无法弄清楚如何创建一个Mutli-CategoryMarker但你可以创建一些similer by 调整ItemMarginCategoryMargin并添加其他CategoryMarkers

{
  CategoryMarker marker = new CategoryMarker("Category 2");
  marker.setLabel("Band X");
  marker.setLabelAnchor(RectangleAnchor.TOP);
  marker.setLabelTextAnchor(TextAnchor.TOP_CENTER);
  marker.setLabelOffsetType(LengthAdjustmentType.CONTRACT);
  plot.addDomainMarker(marker, Layer.BACKGROUND);
  }
  {
  CategoryMarker marker = new CategoryMarker("Category 3");
  plot.addDomainMarker(marker, Layer.BACKGROUND);
  }
  renderer.setItemMargin(0.0);
  CategoryAxis axis = plot.getDomainAxis();
  axis.setCategoryMargin(0);
}

enter image description here

您可以创建一种方法来添加多个标记,例如

private void addMarkers(List<Comparable> keys){
...

更正确的解决方案可能是编写您自己的渲染器实现和相关代码