1

答えはどこかにあると確信していますが、実際には見つかりません。

多くのエントリ (1000 としましょう) を持つ LineChart があります。プロットでは、Y 軸を完全に確認 (および調整 (A を参照)) できます。X軸だけで頭がおかしくなる!1000 エントリでは、プロットの底の数はありません。

A: これで Y 軸をうまく調整できます。最終 NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setRange(0.00, 1.00); rangeAxis.setTickUnit(新しい NumberTickUnit(0.2)); rangeAxis.setVerticalTickLabels(false);

X軸でも同じことをしたいです。

私を助けてください。どうもありがとう


-> 最初の答えの問題 | 100 の数値と 50 の間隔のドメイン軸

100 の数値と 50 の間隔のドメイン軸

4

1 に答える 1

2

残念ながら、JfreeChart のコードを変更する必要があります。オープンソースは素晴らしいですか?

BarChart で以前にこの問題がありました。x 軸の目盛りをカスタマイズすることで、これを CategoryAxis.java だけに実装しました。これがあなたに光を当てることができることを願っています。

変数「tickInterval」に注意してください。このプロパティをクラスに追加しました。たとえば、1000 個の数値がある場合、tickInterval を 99 に設定すると、0、100、200、300 ... のみが表示されます。

ところで、私のフリーチャートのバージョンは 1.0.5 です

public List refreshTicks(Graphics2D g2, 
                         AxisState state,
                         Rectangle2D dataArea,
                         RectangleEdge edge) {

    List ticks = new java.util.ArrayList();

    // sanity check for data area...
    if (dataArea.getHeight() <= 0.0 || dataArea.getWidth() < 0.0) {
        return ticks;
    }

    CategoryPlot plot = (CategoryPlot) getPlot();
    List categories = plot.getCategoriesForAxis(this);
    double max = 0.0;

    if (categories != null) {
        CategoryLabelPosition position 
                = this.categoryLabelPositions.getLabelPosition(edge);
        float r = this.maximumCategoryLabelWidthRatio;
        if (r <= 0.0) {
            r = position.getWidthRatio();   
        }

        float l = 0.0f;
        if (position.getWidthType() == CategoryLabelWidthType.CATEGORY) {
            l = (float) calculateCategorySize(categories.size(), dataArea, 
                    edge);  
        }
        else {
            if (RectangleEdge.isLeftOrRight(edge)) {
                l = (float) dataArea.getWidth();   
            }
            else {
                l = (float) dataArea.getHeight();   
            }
        }
        int categoryIndex = 0;
        Iterator iterator = categories.iterator();
        while (iterator.hasNext()) {
            Comparable category = (Comparable) iterator.next();
            if(categoryIndex>0 && tickInterval>0)
            {
                if((categoryIndex+1) % (tickInterval+1) > 0)
                {
                    category = "";
                }
            }

            TextBlock label = null;
            if(tickInterval> 0)
            {
                label = this.createSingleLabel(category, l * r, edge, g2);
            }
            else
            {
                label = createLabel(category, l * r, edge, g2);
            }
            if (edge == RectangleEdge.TOP || edge == RectangleEdge.BOTTOM) {
                max = Math.max(max, calculateTextBlockHeight(label, 
                        position, g2));
            }
            else if (edge == RectangleEdge.LEFT 
                    || edge == RectangleEdge.RIGHT) {
                max = Math.max(max, calculateTextBlockWidth(label, 
                        position, g2));
            }
            Tick tick = new CategoryTick(category, label, 
                    position.getLabelAnchor(), position.getRotationAnchor(), 
                    position.getAngle());
            ticks.add(tick);
            categoryIndex = categoryIndex + 1;
        }
    }
    state.setMax(max);
    return ticks;

}
于 2012-07-27T15:38:50.707 に答える