jfreechart实现动态图表

青衣白 2018-01-20 02:31:33
1.生成图形报表时一般使用制图工厂ChartFatory类进行创建,只有创建制图对象jfreechart后才能生成实际图片,然后可以设置图片边界,字体等属性
2.数据集合是用来装载绘图表所需要的数据集
核心对象---dataset接口
3.通过数据集合生成的数据图表通过绘图区对象进行属性设置,(背景色,透明度等)由plot类定义,plot有三个子类、
3--1.pieplot类:用来绘制饼形图
3--2,categoryplot类:支持折线图,区域图等
3--3,xyplot类:可以具有多个数据集合,
4.坐标轴对象:axis
4.1:categoryaxis类:对分类轴进行设置,
4.2:valueaxis类;对数据轴进行设置
4.2.1:numberaxis类:对数值类型数据轴进行设置
4.2.2:dateaxis类:对日期轴进行设置
5.abstactRenderer图片渲染对象:
6.制图过程:配置jfreechart,创建数据集合和jfreechart实例以及设置图标相关属性
6.1获取图片:课生成.jpeg,.png格式图片,一般由jfreechart组件进行管理来生成图片,
>import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class RealTimeChart extends ChartPanel implements Runnable
{
private static TimeSeries timeSeries;
private long value=0;
public RealTimeChart(String chartContent,String title,String yaxisName)
{
super(createChart(chartContent,title,yaxisName));
}
private static JFreeChart createChart(String chartContent,String title,String yaxisName){
//创建时序图对象
timeSeries = new TimeSeries(chartContent,Millisecond.class);
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"时间(秒)",yaxisName,timeseriescollection,true,true,false);
XYPlot xyplot = jfreechart.getXYPlot();
//纵坐标设定
ValueAxis valueaxis = xyplot.getDomainAxis();
//自动设置数据轴数据范围
valueaxis.setAutoRange(true);
//数据轴固定数据范围 30s
valueaxis.setFixedAutoRange(30000D);
valueaxis = xyplot.getRangeAxis();
//valueaxis.setRange(0.0D,200D);
return jfreechart;
}
public void run()
{
while(true)
{
try
{
timeSeries.add(new Millisecond(), randomNum());
Thread.sleep(300);
}
catch (InterruptedException e) { }
}
}
private long randomNum()
{
System.out.println((Math.random()*20+80));
return (long)(Math.random()*20+80);
}
}
//Test.java
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class Test
{
/**
* @param args
*/
public static void main(String[] args)
{
JFrame frame=new JFrame("Test Chart");
RealTimeChart rtcp=new RealTimeChart("Random Data","随机数","数值");
frame.getContentPane().add(rtcp,new BorderLayout().CENTER);
frame.pack();
frame.setVisible(true);
(new Thread(rtcp)).start();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent windowevent)
{
System.exit(0);
}
});
}
}
<https://github.com/qingyibaimao/JFreeChart.git>

嗯嗯加点东西,这个东西写出来时的一个文档
> 使用jfreechart技术实现数据的动态图表
1.主页面:
2.首先介绍下jfreechart,jfreechart是java的一个类包,主要负责实现柱状图,折线图,饼图的动态图,从而使数据可视化,便于更好更直观的查看数据
3.jfreechart技术实现:首先配置一个jfreechart自带类DisplayChart:该类用于将数据绘成图片从而展现出来:(注:该类是就freechart包自带类,只需在web.xml中配置url从而可以访问即可,不要再自己建一个DisplayChart类,否则会显示这个类一直报错,我再这一点整整苦恼了两天)

嘿嘿嘿其实就是一个servlet配置,再次说明,不要再自己建DisplayChart类,这个jfreechart的jar包里面有
嗯,该主角了,本来以为高大上的以为很牛逼,搞清楚之后核心就是两个方面,一个是创建数据集合,也就是获取你需要制图的数据,可以你自己手动添加,也可以连接数据库获取数据库值,当然也可以再引用其他包自动获取数据,必须我后来找的一个实时获取本机cpu,内存,缓冲区,交换区的信息,和一个获取java虚拟机信息的方法,当然也可以和嵌入式结合,往外面各个地方放点传感器啊然后将传感器获取的数据动态的传入进来做成一个动态折线图,那么就6了,当然我后来写的时候又一次突然想起来电脑的任务管理器里面,可以动态追踪CPU使用率啊什么,顿时感觉好牛逼,可是我再网上巴拉了好久,很遗憾没找到相关的类,好了回归正题
刚说到核心之一的创建数据集合,数据有了,那就剩下制图了,jfreechart里面包装了制作各种图的方法,只需要引用就行, 当然对这些图的美化也是各种各样
举个栗子吧:
第一个jdbc饼图,额就是我暑假留校这一段时间的消费情况吗,把数据写到了数据图里面,好了看代码:

额,这一块其实就是连接数据库获取数据,函数里面没啥说的,就是注意要实现PieDataset对象,引用了这个对象就可以把数据返回给jfreechart内部,从而在绘图的时候才能引用这个数据


然后,这一块就是绘图啦,首先实例JFreeChart组件,想画图就全靠这个了,因此这也是该技术的一个核心类组件,这一块每一句后面都添加了注释是干啥的,不过,只写这些是画不出一个图的,这个步骤只是把这个图需要的数据整到一块,并说明是画成一个什么样的图以及对这个图细节的修改
最后,开始画图了


对,看的没错,刚刚写的那两部分,一个获取数据,一个创建了一个制图对象,但是制图这个活还是交给jfreechart的一个ServletUtilities类的一个saveChartAsJPEG()方法实现的,在改方法中引入制图对象,图的长和宽以及一个HttpSession对象,然后到这里图片就生成了,然后图片有了,可是他在哪?
这就要用到一直强调的不用自己建类的DisplayChart,通过getContextPath()+"/servlet/DisplayChart?filename="+filename

至于后面的输出问题,怪我是个直男咯一点点css的东西都不想加,就默默做个安静的后台码农吧
好了继续来个时序图

这个,就说下数据获取和图对象的制作吧

是的,获取随机数啦

然后还是获取jfreechart对象然后对图片进行渲染处理了,各个不同图的区别就在于一个制图对象的不同,每个图有相对应的方法去处理相应的对象,而图片制作和获取图片的方法是一模一样的
然后你以为结束了?
不,还有一个获取本机电脑信息的类啊:sigar包
这个包,可以获取很多东西,
cpu信息

每块CPU的使用信息

内存和交换区信息

硬盘信息

以及我自己也不知到的是什么东西的东西

这些是总结官方文档里的方法写的,总结一下,电脑砸了吧,可以换新的了,2333
就大致说下获取CPU,内存,交换区的方法吧
先看下cpu使用信息吧,还是挺不错得,够用了

至于内存的话

4G真的不够用啊,感觉8G最低标配啊,攒钱买吧
看如何获取CPU信息吧,是的就这3个步骤,实例化sigar,获取里面的cpu对象,然后使用各种方法了,就是那么简单,内存和其他的也是一样的


获取交换区的
获取内存信息

额,有点少,可是,没办法,结束了,另附下github地址里面有完整代码
https://github.com/qingyibaimao/JFreeChart/releases/tag/JFreechart



...全文
447 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧