jfreechart显示非时间序列的折线图时,如果点太多,横坐标无法显示,只能看到一排密密的小点。 
有没有办法只显示部分横坐标,比如每隔5个点显示一个横坐标,纵坐标不变,对应的折线图也不变

解决方案 »

  1.   


    package com.jfree;import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.text.SimpleDateFormat;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartMouseEvent;
    import org.jfree.chart.ChartMouseListener;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.ChartRenderingInfo;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.DateAxis;
    import org.jfree.chart.axis.DateTickUnit;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.entity.XYItemEntity;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.chart.title.LegendTitle;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.time.Day;
    import org.jfree.data.time.Hour;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RectangleEdge;
    import org.jfree.ui.RefineryUtilities;public class TimeSeriesTest extends ApplicationFrame {
    /**
    private static final long serialVersionUID = 1L;
    private JFreeChart chart;
    private ChartPanel chartPanel;
    public TimeSeriesTest(String str){
    super(str);
    XYDataset localXYDataset = createDataset();
    chart = createChart(localXYDataset);
    chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(800, 500));

    setContentPane(chartPanel);
    } private static XYDataset createDataset(){
    Day localDay = new Day();
    TimeSeries localTimeSeries1 = new TimeSeries("随机数据", Hour.class);
    localTimeSeries1.add(new Hour(0, localDay), 520.2D);
    localTimeSeries1.add(new Hour(2, localDay), 575.1D);
    localTimeSeries1.add(new Hour(4, localDay), 564.4D);
    localTimeSeries1.add(new Hour(6, localDay), 540.2D);
    localTimeSeries1.add(new Hour(8, localDay), 530.2D);
    localTimeSeries1.add(new Hour(10, localDay), 555.2D);
    localTimeSeries1.add(new Hour(12, localDay), 580.4D);
    localTimeSeries1.add(new Hour(14, localDay), 583.2D);
    localTimeSeries1.add(new Hour(16, localDay), 595.2D);
    localTimeSeries1.add(new Hour(18, localDay), 564.4D);
    localTimeSeries1.add(new Hour(20, localDay), 523.2D);
    localTimeSeries1.add(new Hour(22, localDay), 515.2D);
    localTimeSeries1.add(new Hour(24, localDay), 530.4D);
    TimeSeriesCollection localTimeSeriesCollection = new TimeSeriesCollection();
    localTimeSeriesCollection.addSeries(localTimeSeries1); return localTimeSeriesCollection; } private static JFreeChart createChart(XYDataset xyDataset){
    JFreeChart localChart = ChartFactory.createTimeSeriesChart("时间序列测试", "时间", "数值", xyDataset, true, true, false);
    TextTitle title = localChart.getTitle();
    title.setFont(new Font("宋体", Font.BOLD, 24));
    LegendTitle legend = localChart.getLegend();
    legend.setItemFont(new Font("宋体", Font.ITALIC, 14)); XYPlot plot = (XYPlot)localChart.getPlot();
    plot.setBackgroundPaint(null); // X 轴
    DateAxis xAxis = (DateAxis)plot.getDomainAxis();
    xAxis.setLabelFont(new Font("宋体", Font.PLAIN, 18));
    xAxis.setLabelPaint(Color.BLUE);
    SimpleDateFormat fmt = new SimpleDateFormat("k:mm");
                    // X轴坐标间隔设置,本例是4小时一间隔
    xAxis.setTickUnit(new DateTickUnit(DateTickUnit.HOUR, 4, fmt)); // Y 轴
    ValueAxis yAxis = plot.getRangeAxis();
    yAxis.setLabelFont(new Font("宋体", Font.PLAIN, 18));
    yAxis.setLabelPaint(Color.BLUE); return localChart; } public static JPanel createDemoPanel(){
    JFreeChart chart = createChart(createDataset());
    return new ChartPanel(chart);
    }
    public static void main(String[] paramArrayOfString){
    TimeSeriesTest theApp = new TimeSeriesTest("时间序列示例");
    theApp.pack();
    RefineryUtilities.centerFrameOnScreen(theApp);
    theApp.setVisible(true);
    }
    }