How do I rotate tick mark labels on the domain of a number axis in JFreeChart?

前端 未结 3 861
迷失自我
迷失自我 2020-11-28 14:40

Just like is being done in the following example, I want the tick mark labels on the domain of chart to be rotated 45 degrees as the are in this chart: http://left.subtree.o

3条回答
  •  遥遥无期
    2020-11-28 15:27

    The method setVerticalTickLabels() may be an alternative. If not, I don't see any choice but to override refreshTicksHorizontal(). See also this example.

    enter image description here

    import java.awt.Color;
    import java.awt.Dimension;
    import java.util.*;
    import org.jfree.chart.*;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYItemRenderer;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    
    /**
     * @see https://stackoverflow.com/questions/7208657
     * @see https://stackoverflow.com/questions/7071057
     */
    public class ScatterTickLabels extends ApplicationFrame {
    
        public ScatterTickLabels(String s) {
            super(s);
            final ChartPanel chartPanel = createDemoPanel();
            chartPanel.setPreferredSize(new Dimension(640, 480));
            this.add(chartPanel);
        }
    
        public static ChartPanel createDemoPanel() {
            JFreeChart jfreechart = ChartFactory.createScatterPlot(
                "Scatter Plot Demo", "X", "Y", samplexydataset(),
                PlotOrientation.VERTICAL, true, true, false);
            XYPlot xyPlot = (XYPlot) jfreechart.getPlot();
            xyPlot.setDomainCrosshairVisible(true);
            xyPlot.setRangeCrosshairVisible(true);
            XYItemRenderer renderer = xyPlot.getRenderer();
            renderer.setSeriesPaint(0, Color.blue);
            NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis();
            domain.setVerticalTickLabels(true);
            return new ChartPanel(jfreechart);
        }
    
        private static XYDataset samplexydataset() {
            int cols = 20;
            int rows = 20;
            XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
            XYSeries series = new XYSeries("Random");
            Random rand = new Random();
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < cols; j++) {
                    double x = rand.nextGaussian();
                    double y = rand.nextGaussian();
                    series.add(x, y);
                }
            }
            xySeriesCollection.addSeries(series);
            return xySeriesCollection;
        }
    
        public static void main(String args[]) {
            ScatterTickLabels demo = new ScatterTickLabels("Scatter Plot Demo");
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
        }
    }
    

提交回复
热议问题