2

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

例如:

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

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

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

只是为了澄清一点,这是我想要实现的目标的图片:在此处输入图像描述

4

1 回答 1

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);

带有 CategoryMarker 的条形图

我不知道如何创建 Mutli-CategoryMarker 但您可以通过调整ItemMarginandCategoryMargin并添加其他内容来创建类似的东西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);
}

在此处输入图像描述

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

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

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

于 2012-07-09T08:25:20.670 回答