完成折线图sts北方站长站 通过前面的实现代码,我们来看一个完整的折线图示例:
sts北方站长站double[] y = new double[]sts北方站长站 { 12.5,14.1,13.2,11.4,13.25,12.32 }; sts北方站长站 try { sts北方站长站 DataSeries ds = new DefaultDataSeries(Primary2ObjectUtil.Doulbe2Object(y)); sts北方站长站 XAxis xaxis = new XAxis(new XScale(0,y.length+1),ds.size()); sts北方站长站 YAxis yaxis = new YAxis(new YScale(10,15),4); sts北方站长站 xaxis.setDrawGrid(true); sts北方站长站 yaxis.setDrawGrid(true); sts北方站长站 LinePlot plot = new LinePlot(ds,xaxis,yaxis); sts北方站长站 Chart chart = new Chart(xaxis,yaxis,plot); sts北方站长站 JFrame frame = new JFrame("Line Plot Demo"); sts北方站长站 frame.setSize(400,300); sts北方站长站 frame.getContentPane().add(chart); sts北方站长站 frame.setVisible(true); sts北方站长站 } sts北方站长站 catch (InvalidDataException e) sts北方站长站 { sts北方站长站 e.printStackTrace(); sts北方站长站 } |
sts北方站长站 下面是这个
程序运行起来的屏幕截图:
sts北方站长站
sts北方站长站(单组数据的折线图)
sts北方站长站
sts北方站长站(有多组数据的折线图)
sts北方站长站 扩展其它类型的图表sts北方站长站 通过前面的例子,我们知道要实现特定类型的图表,只要实现特定的Plot类就可以了。如果数据有特殊格式,只需再扩展一个DataSeries就可以了。为使大家加深理解,我们再以一个柱状图为例子作讲解。
sts北方站长站 在第一节的图1-2和图1-3中,我们知道,一组数据除了用折线图表示之外,还可以表示成柱状图的形式。在这里我们就借用折线图的数据,来实现一个BarPlot。下面列出了BarPlot的关键代码:
sts北方站长站public class BarPlot extends Plotsts北方站长站 { sts北方站长站 …… sts北方站长站 public void draw(Graphics g, DataSeries ds, int index) sts北方站长站 { sts北方站长站 if ( ds == null ) return; sts北方站长站 /*每组柱子的个数*/ sts北方站长站 int bars = this.dataSeries.size(); sts北方站长站 /*出每个柱子应有的宽度*/ sts北方站长站 int barWidth = (int) ((double)xAxis.width/((double)ds.size()+1)/bars-barSpace); sts北方站长站 if ( barWidth <=0 ) barWidth = 1; sts北方站长站 int barx,bary,barw,barh; sts北方站长站 int barGroupWidth = barWidth*bars; sts北方站长站 double ymin = yAxis.getScale().getMin(); sts北方站长站 for ( int i = 0;i<ds.size(); i++ ) sts北方站长站 { sts北方站长站 barx = (int)(xAxis.getScale().getScreenCoordinate(i+1) - barGroupWidth/2.0d) + index*barWidth; sts北方站长站 double val = ((Double)ds.getYData(i)).doubleValue(); sts北方站长站 bary = yAxis.getScale().getScreenCoordinate(val); sts北方站长站 if ( ymin<0) if ( val<0 ) sts北方站长站 { sts北方站长站 barh = bary-yAxis.getScale().getScreenCoordinate(0); sts北方站长站 bary = bary-barh; sts北方站长站 }sts北方站长站 else sts北方站长站 { sts北方站长站 barh = yAxis.getScale().getScreenCoordinate(0)-bary; sts北方站长站 } sts北方站长站 else sts北方站长站 { sts北方站长站 barh = yAxis.getScale().getScreenCoordinate(ymin)-bary; sts北方站长站 } sts北方站长站 barw = barWidth; g.setColor(barColor); sts北方站长站 g.fillRect(barx,bary,barw, barh); sts北方站长站 g.setColor(Color.BLACK); sts北方站长站 g.drawRect(barx,bary, barw, barh); sts北方站长站 }sts北方站长站 } |
sts北方站长站 BarPlot的实现比LinePlot稍微复杂一点。主要是要计算每个柱子的位置,宽度和高度。由于考虑到多组柱子以及柱子的值为负数时坐标不同,所以计算要繁索一点。但总体来说,实现BarPlot也是相当简单的。由于柱状图运行代码与折线图类似,这里就不列出演示代码。下面来看看
程序在几种情况下的运行画面:
sts北方站长站
sts北方站长站 (单组数据的柱状图)
sts北方站长站
sts北方站长站 (多组数据的柱状图)
sts北方站长站
sts北方站长站 (有负值的柱状图)
sts北方站长站 现在我们有了画折线图的类LinePlot和画柱状图的类BarPlot。我们要生成一个折线图与柱状图组合起来的例子。还是来看看代码是如何实现的:
sts北方站长站DataSeries ds = new DefaultDataSeries(Primary2ObjectUtil.Doulbe2Object(y1)); sts北方站长站 XAxis xaxis = new XAxis(new XScale(0,y1.length+1),ds.size()); sts北方站长站 YAxis yaxis = new YAxis(new YScale(10,15),4); sts北方站长站 xaxis.setDrawGrid(true); sts北方站长站 yaxis.setDrawGrid(true); sts北方站长站 LinePlot linePlot = new LinePlot(ds,xaxis,yaxis);sts北方站长站 BarPlot barPlot = new BarPlot(ds,xaxis,yaxis);sts北方站长站 /*先生成Bar Chart*/sts北方站长站 Chart chart = new Chart(xaxis,yaxis,barPlot);sts北方站长站 /*然后将Line Plot加到Bar Chart中*/ sts北方站长站 chart.addPlot(linePlot); |
sts北方站长站 代码中,我们先建立了一个Line Plot和一个Bar Plot,再生成了一个Bar Chart,然后再将Line Plot加到Bar Chart中。一个组合图表就简简单单的完成了。来看看:
sts北方站长站
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面