jfreechart 时间序列图

举报
风吹稻花香 发表于 2021/06/05 02:06:11 2021/06/05
【摘要】 package lqz.view.chart; import java.text.SimpleDateFormat; import java.util.Random; import java.util.Vector; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org...


package lqz.view.chart;

import java.text.SimpleDateFormat;
import java.util.Random;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

import lqz.util.ChartUtils;
import lqz.util.Serie;

/**
 *
 * @author ccw
 * @date 2014-6-11
 * <p>
 * 创建图表步骤:<br/>
 * 1:创建数据集合<br/>
 * 2:创建Chart:<br/>
 * 3:设置抗锯齿,防止字体显示不清楚<br/>
 * 4:对柱子进行渲染,<br/>
 * 5:对其他部分进行渲染<br/>
 * 6:使用chartPanel接收<br/>
 *
 * </p>
 */
public class TimeSeriesChart { public TimeSeriesChart() { } /**
 * 创建数据集合
 */
   public TimeSeriesCollection createDataset() { TimeSeriesCollection dataset = new TimeSeriesCollection();
 String[] categories = { "dataA", "dataB" };

 Random random = new Random();
 for (int row = 0; row < categories.length; row++) { Vector<Object[]> dateValues = new Vector<Object[]>();
 for (int i = 0; i < 200; i++) { String date = (2000 + i) + "-0" + i + "-21";
 System.out.println(date);
 Object[] dateValue = { date, random.nextInt(100)+i/20*20 };
 dateValues.add(dateValue);

 } TimeSeries timeSeries = ChartUtils.createTimeseries(categories[row], dateValues);
 dataset.addSeries(timeSeries);
 } return dataset;
   } public ChartPanel createChart() { // 2:创建Chart[创建不同图形]
 TimeSeriesCollection dataset = createDataset();
 JFreeChart chart = ChartFactory.createTimeSeriesChart("哎哎哎", "", "", dataset);
 // 3:设置抗锯齿,防止字体显示不清楚
 ChartUtils.setAntiAlias(chart);// 抗锯齿
 // 4:对柱子进行渲染[创建不同图形]
 ChartUtils.setTimeSeriesRender(chart.getPlot(), false, true);
 // 5:对其他部分进行渲染
 XYPlot xyplot = (XYPlot) chart.getPlot();
 ChartUtils.setXY_XAixs(xyplot);
 ChartUtils.setXY_YAixs(xyplot);
 // 日期X坐标轴
 DateAxis domainAxis = (DateAxis) xyplot.getDomainAxis();
 domainAxis.setAutoTickUnitSelection(false);
 DateTickUnit dateTickUnit = null;
 if (dataset.getItemCount(0) < 16) { //刻度单位月,半年为间隔
 dateTickUnit = new DateTickUnit(DateTickUnitType.MONTH, 6, new SimpleDateFormat("yyyy-MM")); // 第二个参数是时间轴间距
 } else {// 数据过多,不显示数据
 XYLineAndShapeRenderer xyRenderer = (XYLineAndShapeRenderer) xyplot.getRenderer();
 xyRenderer.setBaseItemLabelsVisible(false);
 //设置曲线是否显示数据节点
 xyRenderer.setBaseShapesVisible(false);
 dateTickUnit = new DateTickUnit(DateTickUnitType.YEAR, 1, new SimpleDateFormat("yyyy")); // 第二个参数是时间轴间距
 } // 设置时间单位
 domainAxis.setTickUnit(dateTickUnit);
// ChartUtils.setLegendEmptyBorder(chart);
 // 设置图例位置
 // 6:使用chartPanel接收
 ChartPanel chartPanel = new ChartPanel(chart);
 chartPanel.setMouseZoomable(true, false);
 return chartPanel;
   } public static void main(String[] args) { final JFrame frame = new JFrame();
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setSize(1024, 420);
 frame.setLocationRelativeTo(null);

 SwingUtilities.invokeLater(new Runnable() { @Override
 public void run() { // 创建图形
 ChartPanel chartPanel = new TimeSeriesChart().createChart();
 frame.getContentPane().add(chartPanel);
 frame.setVisible(true);
 } });

   }

}

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/70833080

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。