您的位置:首页 > 其它

Jfreechart 小记

2013-01-09 11:36 69 查看


package org.jfree.chart.line;

import java.awt.Color;

import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.ChartUtilities;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.AxisLocation;

import org.jfree.chart.axis.CategoryAxis;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.axis.NumberTickUnit;

import org.jfree.chart.axis.SymbolAxis;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.chart.renderer.xy.XYSplineRenderer;

import org.jfree.data.RangeType;

import org.jfree.data.time.Minute;

import org.jfree.data.time.RegularTimePeriod;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

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.RectangleInsets;

import org.jfree.ui.RefineryUtilities;

/**

*

* A demo showing a line chart drawn using spline curves.

*/

public class TemperatureChart extends ApplicationFrame {

private static float[] TemperatureData;

private static float nodata;

/**

* Creates a new instance of the demo application.

*

* @param title the frame title.

*/

public TemperatureChart(String title,float[] temperature,float nodata) {

super(title);

this.TemperatureData = temperature;

this.nodata = nodata;

JPanel content = createDemoPanel();

content.setPreferredSize(new java.awt.Dimension(300, 500));

getContentPane().add(content);

}

/**

* Creates a panel for the demo (used by SuperDemo.java).

*

* @return A panel.

*/

public static JPanel createDemoPanel() {

//轴线数值为给定数值

SymbolAxis ySymbolAxis1 = new SymbolAxis("hPa", new String[] {

"1000", "950", "920", "850", "780", "700", "620", "500", "400", "300",

"250", "200", "150", "100", "70", "50", "30", "20", "10", "5"

});

//给定数值的索引起始数值 0,1,2,3......

ySymbolAxis1.setUpperMargin(0.0D);

// create plot...

NumberAxis xAxis = new NumberAxis("K");

xAxis.setAutoRangeIncludesZero(false);

/*

*

NumberAxis yAxis = new NumberAxis("hPa");

//数值反转

yAxis.setInverted(true);

yAxis.setRangeAboutValue(100, 1);

*/

// 自定义轴线数值

/*

yAxis.setAutoTickUnitSelection(false);

double unit=50d;//刻度的长度

NumberTickUnit ntu= new NumberTickUnit(unit);

yAxis .setTickUnit(ntu);

yAxis.setTickLabelPaint(Color.blue);

XYSplineRenderer renderer1 = new XYSplineRenderer();

*/

//设置线条样式

XYLineAndShapeRenderer renderer1 = new XYLineAndShapeRenderer(true, true);

//打好地基 plot:地基情节

XYPlot plot = new XYPlot(createTemperatureDataset(), ySymbolAxis1, xAxis, renderer1);

plot.setDomainPannable(true);

//添加第轴线

NumberAxis numberaxis1 = new NumberAxis("湿度");

//注意轴线给定索引 以便数值找到要标准轴线

plot.setRangeAxis(10, numberaxis1);

//调整轴线位置

plot.setRangeAxisLocation(1, AxisLocation.TOP_OR_LEFT);

XYDataset xydataset1 = createHumidityDataset();

//数据 标记索引

plot.setDataset(10, xydataset1);

// plot.mapDatasetToDomainAxis(10, 10);

//将数值dataset 与 相应的坐标绑定。 索引

plot.mapDatasetToRangeAxis(10, 10);

// plot.setRenderer(10, new XYSplineRenderer());

//创建线条样式

plot.setRenderer(10,new XYLineAndShapeRenderer(true, true));

//美化界面

plot.setBackgroundPaint(Color.lightGray);

plot.setDomainGridlinePaint(Color.white);

plot.setRangeGridlinePaint(Color.white);

plot.setAxisOffset(new RectangleInsets(4, 4, 4, 4));

//图 横或纵

plot.setOrientation(PlotOrientation.HORIZONTAL);

JFreeChart chart = new JFreeChart("MODIS",

JFreeChart.DEFAULT_TITLE_FONT, plot, true);

// create and return the chart panel...

ChartUtilities.applyCurrentTheme(chart);

ChartPanel chartPanel = new ChartPanel(chart, false);

return chartPanel;

}

/**

* 索引 使其一一对应

* @return

*/

private static XYDataset createTemperatureDataset()

{

XYSeries xyseries = new XYSeries("温度");

if(TemperatureData[0] != nodata){

xyseries.add(19,TemperatureData[0]);

}

if(TemperatureData[1] != nodata){

xyseries.add(18,TemperatureData[1]);

}

if(TemperatureData[2] != nodata){

xyseries.add(17,TemperatureData[2]);

}

if(TemperatureData[3] != nodata){

xyseries.add(16,TemperatureData[3]);

}

if(TemperatureData[4] != nodata){

xyseries.add(15,TemperatureData[4]);

}

if(TemperatureData[5] != nodata){

xyseries.add(14,TemperatureData[5]);

}

if(TemperatureData[6] != nodata){

xyseries.add(13,TemperatureData[6]);

}

if(TemperatureData[7] != nodata){

xyseries.add(12,TemperatureData[7]);

}

if(TemperatureData[8] != nodata){

xyseries.add(11,TemperatureData[8]);

}

if(TemperatureData[9] != nodata){

xyseries.add(10,TemperatureData[9]);

}

if(TemperatureData[10] != nodata){

xyseries.add(9,TemperatureData[10]);

}

if(TemperatureData[11] != nodata){

xyseries.add(8,TemperatureData[11]);

}

if(TemperatureData[12] != nodata){

xyseries.add(7,TemperatureData[12]);

}

if(TemperatureData[13] != nodata){

xyseries.add(6,TemperatureData[13]);

}

if(TemperatureData[14] != nodata){

xyseries.add(5,TemperatureData[14]);

}

if(TemperatureData[15] != nodata){

xyseries.add(4,TemperatureData[15]);

}

if(TemperatureData[16] != nodata){

xyseries.add(3,TemperatureData[16]);

}

if(TemperatureData[17] != nodata){

xyseries.add(2,TemperatureData[17]);

}

if(TemperatureData[18] != nodata){

xyseries.add(1,TemperatureData[18]);

}

if(TemperatureData[19] != nodata){

xyseries.add(0,TemperatureData[19]);

}

XYSeriesCollection xyseriescollection = new XYSeriesCollection();

xyseriescollection.addSeries(xyseries);

return xyseriescollection;

}

/**

*索引 使其一一对应 数据暂时未读 假数据代替

* 同数据

* @return

*/

private static XYDataset createHumidityDataset()

{

XYSeries xyseries = new XYSeries("湿度");

xyseries.add(0, 800);

xyseries.add(1, 900);

xyseries.add(2, 700);

xyseries.add(3, 800);

xyseries.add(4, 600);

xyseries.add(5, 300);

xyseries.add(6, 200);

xyseries.add(7, 100);

xyseries.add(8, 40);

xyseries.add(9, 10);

XYSeriesCollection xyseriescollection = new XYSeriesCollection();

xyseriescollection.addSeries(xyseries);

return xyseriescollection;

}

/**

* float[] to new String[]

* @return

*/

private static String[] getXData(){

String[] xAxis = new String[TemperatureData.length];

for(int i=0;i<xAxis.length;i++){

if(TemperatureData[i] == nodata){

xAxis[i] = "";//String.valueOf(TemperatureData[i]);

}else{

xAxis[i] = String.valueOf(TemperatureData[i]);

}

}

String[] x = new String[] {

xAxis[0],xAxis[1],xAxis[2],xAxis[3],xAxis[4],xAxis[5],xAxis[6],xAxis[7],xAxis[8],xAxis[9],

xAxis[10],xAxis[11],xAxis[12],xAxis[13],xAxis[14],xAxis[15],xAxis[16],xAxis[17],xAxis[18],xAxis[19]

};

return x;

}

/**

* Creates and returns a sample dataset. The data was randomly

* generated.

*

* @return a sample dataset.

*/

private static XYDataset createSampleData() {

XYSeries series = new XYSeries("温度");

// 5, 10, 20, 30, 50, 70, 100, 150, 200, 250, 300, 400, 500, 620, 700, 780, 850, 920, 950, 1000 hPa

//值不全为空时执行

if(TemperatureData[0] != nodata){

series.add(5,TemperatureData[0]);

}

if(TemperatureData[1] != nodata){

series.add(10,TemperatureData[1]);

}

if(TemperatureData[2] != nodata){

series.add(20,TemperatureData[2]);

}

if(TemperatureData[3] != nodata){

series.add(30,TemperatureData[3]);

}

if(TemperatureData[4] != nodata){

series.add(50,TemperatureData[4]);

}

if(TemperatureData[5] != nodata){

series.add(70,TemperatureData[5]);

}

if(TemperatureData[6] != nodata){

series.add(100,TemperatureData[6]);

}

if(TemperatureData[7] != nodata){

series.add(150,TemperatureData[7]);

}

if(TemperatureData[8] != nodata){

series.add(200,TemperatureData[8]);

}

if(TemperatureData[9] != nodata){

series.add(250,TemperatureData[9]);

}

if(TemperatureData[10] != nodata){

series.add(300,TemperatureData[10]);

}

if(TemperatureData[11] != nodata){

series.add(400,TemperatureData[11]);

}

if(TemperatureData[12] != nodata){

series.add(500,TemperatureData[12]);

}

if(TemperatureData[13] != nodata){

series.add(620,TemperatureData[13]);

}

if(TemperatureData[14] != nodata){

series.add(700,TemperatureData[14]);

}

if(TemperatureData[15] != nodata){

series.add(780,TemperatureData[15]);

}

if(TemperatureData[16] != nodata){

series.add(850,TemperatureData[16]);

}

if(TemperatureData[17] != nodata){

series.add(920,TemperatureData[17]);

}

if(TemperatureData[18] != nodata){

series.add(950,TemperatureData[18]);

}

if(TemperatureData[19] != nodata){

series.add(1000,TemperatureData[19]);

}

XYSeriesCollection result = new XYSeriesCollection(series);

return result;

}

/**

* The starting point for the regression demo.

*

* @param args ignored.

*/

public static void main(String args[]) {

// TemperatureChart appFrame = new TemperatureChart("JFreeChart: TemperatureChart.java",null,null);

// appFrame.pack();

// RefineryUtilities.centerFrameOnScreen(appFrame);

// appFrame.setVisible(true);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: