2

我正在使用具有以下演示文稿的图表:

在此处输入图像描述

¿ 如何使类别标签左对齐或对齐?实际上它们看起来居中,但这不是我所需要的。

我正在使用的代码如下:

JFreeChart chart = getChart();
CategoryPlot plot = (CategoryPlot) chart.getPlot();

BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(true);

CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setMaximumCategoryLabelLines(5);

CategoryLabelPositions p = domainAxis.getCategoryLabelPositions();

CategoryLabelPosition left = new CategoryLabelPosition(
    RectangleAnchor.LEFT, TextBlockAnchor.CENTER_LEFT, 
    TextAnchor.CENTER_LEFT, 0.0,
    CategoryLabelWidthType.RANGE, 0.70f //Assign 70% of space for category labels
);

domainAxis.setCategoryLabelPositions(CategoryLabelPositions
        .replaceLeftPosition(p, left));

NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

BasicStroke stroke = new BasicStroke(1);
plot.setDomainGridlinePaint(Color.black);
plot.setDomainGridlineStroke(stroke);
plot.setRangeGridlinePaint(Color.black);
plot.setRangeGridlineStroke(stroke);

CategoryDataset cd = plot.getDataset();

setBarColors(renderer, plot, cd);

谢谢。

4

1 回答 1

3

类别标签是 的实例org.jfree.text.TextBlock,它确实有一个setLineAlignment(HorizontalAlignment alignment)方法,但我没有看到通过 CategoryPlot 或 CategoryAxis API 获取它们的方法(有大量的方法和强制转换,所以我不能明确地告诉你这样一种方法不存在,只是我还没有找到)。但是,覆盖createLabel方法CategoryAxis以设置对齐方式有效。

(在您获取域轴的代码之前):

plot.setDomainAxis(new CategoryAxis() {
    @Override
    protected TextBlock createLabel(Comparable category, float width, RectangleEdge edge, Graphics2D g2) {
        TextBlock label = TextUtilities.createTextBlock(category.toString(), getTickLabelFont(category), getTickLabelPaint(category), width, this.getMaximumCategoryLabelLines(), new G2TextMeasurer(g2));
        label.setLineAlignment(HorizontalAlignment.LEFT);
        return label;
    }
});

您可能希望向JFreeChart 论坛JFreeChart 功能请求发布请求,因为 David Gilbert 将是明确回答此问题的最佳人选。

于 2013-11-14T18:58:44.027 回答