如何在JFreeChart中的数轴的域上旋转刻度线标签? [英] How do I rotate tick mark labels on the domain of a number axis in JFreeChart?

查看:153
本文介绍了如何在JFreeChart中的数轴的域上旋转刻度线标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

就像在以下示例中所做的那样,我希望图表域上的刻度线标签旋转45度,如下图所示:
http://left.subtree.org/2007/08/14/rotate-labels-jfreechart/

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.org/2007/08/14/rotate-labels-jfreechart/

不同之处在于,我想在带有数字轴的散点图上执行此操作。我在NumberAxis类中找不到与setCategoryLabelPositions()的等价物。

The difference is, I want to do this on a scatter plot with a numeric axis. I can't find an equivalent to setCategoryLabelPositions() in the class NumberAxis.

推荐答案

方法 setVerticalTickLabels() 可能是另一种选择。如果没有,我看不到任何选择,只能覆盖 refreshTicksHorizo​​ntal()。另见示例

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);
    }
}

这篇关于如何在JFreeChart中的数轴的域上旋转刻度线标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆