为单个域轴刻度标签自定义颜色

Customize color for individual Domain axis tick labels

我有一个 JFreeChart,我 运行 通过定制程序 (JRAbstractChartCustomizer)。通过扩展 BarRenderer 并覆盖 getItemLabelPaint(int row, int column)getItemPaint(int row, int column)。每个栏都有一个带有字符串标签的对应刻度,因为域是按名称而不是按数值。我需要一种方法来根据与我为条形图和项目标签着色的方式类似的值分别为刻度标签着色。

我在 BarRenderer 中覆盖了什么方法,或者我在 JRChartCustomizer 中做了什么其他事情来覆盖个别颜色。

我正在为项目标签做的事情:(我想做基本上相同的事情,但对于刻度标签)

class CustomBarRenderer extends BarRenderer {

    private final Color COLOR_GREEN = new Color(0, 227, 0);
    private final Color COLOR_YELLOW = new Color(247, 210, 0);
    private final Color COLOR_RED = new Color(237, 26, 0);

    @Override
    public Paint getItemLabelPaint(int row, int col) {
        CategoryDataset cDataset = getPlot().getDataset();

        if (cDataset != null) {
            Number itemValue = cDataset.getValue(row, col);

            String rowKey = cDataset.getRowKey(row).toString();
            String colKey = cDataset.getColumnKey(col).toString();

            if (itemValue != null) {
                int intVal = itemValue.intValue();

                if (intVal > yellowHigh) {
                    return COLOR_GREEN;
                } else if (intVal >= yellowLow) {
                    return COLOR_YELLOW;
                } else {
                    return COLOR_RED;
                }
            }
        }

        // if all else fails...
        return super.getItemLabelPaint(row, col);
    }

    @Override
    public Paint getItemPaint(int row, int col) {
        ... similar to above ...
    }
}

您图表的域轴刻度标签由 CategoryAxis 呈现。您可以使用 setTickLabelPaint() 按类别为标签着色。下面的示例修改 BarChartDemo1 以使 "Test" 类别标签变成绿色阴影。

CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis domain = plot.getDomainAxis();
domain.setTickLabelPaint("Test", Color.green.darker());

为了更好地控制,您可以覆盖 getTickLabelPaint() in a custom CategoryAxis that has access to the dataset referenced by your CustomBarRenderer. The existing implementation 使用 Map<Category, Paint> 作为查找 table。 Map 是私有的,但该方法可能会让您了解如何继续。