5

を使用してJFreeChart 1.0.14います。プロットが小さすぎる/大きすぎると、軸のラベルが非常に奇妙に伸びます。その動作をオフにして、軸ラベルを常に同じ幅:高さの比率で印刷したいと考えています。

伸ばした

SSCCE は次のとおりです。

import java.awt.BorderLayout;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        XYSeries series = new XYSeries("series a");
        for (int i = 0; i < 100; i++)
            series.add(i, Math.sin(i / 2.0) * Math.cos(i / (2.0 + Math.random())));
        XYSeriesCollection dataset = new XYSeriesCollection(series);
        JFreeChart chart = ChartFactory.createXYLineChart("", "x-axis", "y-axis", dataset, PlotOrientation.VERTICAL, false, false, false);
        ChartPanel panel = new ChartPanel(chart);

        frame.add(panel, BorderLayout.CENTER);

        frame.setSize(400, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

でマークされた出力が生成されますOK。フレームのサイズをいずれかの方向に一定量変更すると、軸ラベル (および目盛りラベル) が歪み始めます ( でマークされた 2 つのフレームでわかるようにstretched)。そして、それらの「ストレッチ係数」が同期されます。

この「機能」を無効にして、軸ラベルを常に固定の幅:高さの比率で表示する方法がわかりません。これを行う方法を知っていますか?

4

1 に答える 1

12

これはスケーリングの例です。

で描画の高さと幅の最大値と最小値を設定する必要がありますChartPanel。一度設定することもできます:

ChartPanel panel = new ChartPanel(chart);
panel.setMaximumDrawHeight(1000);
panel.setMaximumDrawWidth(1000);
panel.setMinimumDrawWidth(10);
panel.setMinimumDrawHeight(10);

いくつかの適切な値を使用するか、次を追加しComponentListenerます。

    frame.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            panel.setMaximumDrawHeight(e.getComponent().getHeight());
            panel.setMaximumDrawWidth(e.getComponent().getWidth());
            panel.setMinimumDrawWidth(e.getComponent().getWidth());
            panel.setMinimumDrawHeight(e.getComponent().getHeight());
        }
    });
于 2012-11-28T16:48:22.590 に答える