1. 程式人生 > >JfreeChart畫雙Y軸折線圖

JfreeChart畫雙Y軸折線圖

折騰好久,都沒有找到一個自己想要的例子,無奈,為了專案,只能找資料自己慢慢拼湊了,功夫不負有心人,終於被我拼出了一個理想中的圖。回頭想想,其實只需要耐心的測試,也沒什麼難……

/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
package com.tgysys.report;

import java.awt.Color;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYDataset;

import com.tgysys.model.javabean.DapfIstanceView;

public class Chart1 {
public static String generateLineChart(HttpSession session, PrintWriter pw,
int w, int h, List list, List dwplList, List hbaceList) {
String filename = null;
JFreeChart jfreechart = createChart(dwplList, hbaceList);
try {
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
filename = ServletUtilities.saveChartAsPNG(jfreechart, 1000, 500,
info, session);
ChartUtilities.writeImageMap(pw, filename, info, true);
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}

private static JFreeChart createChart(List dwplList, List hbaceList) {
XYDataset xydataset = createPriceDataset(hbaceList);
String s = "CHART1 TEST";
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(s, "Date",
"", xydataset, true, true, false);
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
// NumberAxis numberaxis = (NumberAxis) xyplot.getRangeAxis();
// numberaxis.setLowerMargin(0.40000000000000002D);
// DecimalFormat decimalformat = new DecimalFormat("00.00");
// numberaxis.setNumberFormatOverride(decimalformat);
XYItemRenderer xyitemrenderer = xyplot.getRenderer();
xyitemrenderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator(
"{0}: ({1}, {2})", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
new DecimalFormat("0,000.00000")));

NumberAxis numberaxis1 = new NumberAxis("");
numberaxis1.setUpperMargin(0.002);
numberaxis1.setLowerMargin(0.15);
numberaxis1.setLowerBound(49.90);
numberaxis1.setUpperBound(50.08);

DecimalFormat decimalformat2 = new DecimalFormat("00.00");
numberaxis1.setNumberFormatOverride(decimalformat2);
xyplot.setRangeAxis(1, numberaxis1);
xyplot.setDataset(1, createVolumeDataset(dwplList));
xyplot.setRangeAxis(1, numberaxis1);
xyplot.mapDatasetToRangeAxis(1, 1);
StandardXYItemRenderer standardxyitemrenderer1 = new StandardXYItemRenderer();
standardxyitemrenderer1.setSeriesPaint(0, Color.blue);
numberaxis1.setLabelPaint(Color.blue);
numberaxis1.setTickLabelPaint(Color.blue);
xyplot.setRenderer(1, standardxyitemrenderer1);

return jfreechart;
}

private static XYDataset createPriceDataset(List hbaceList) {
try {
final TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.setDomainIsPointsInTime(true);

TimeSeries timeseries = new TimeSeries("ACE",
org.jfree.data.time.Second.class);
for (int i = 0; i < hbaceList.size(); i++) {
DapfIstanceView df = (DapfIstanceView) hbaceList.get(i);
String[] strs = df.getDatetime().split("[- :]");
int a = Integer.parseInt(strs[0]);
int b = Integer.parseInt(strs[1]);
int c = Integer.parseInt(strs[2]);
int d = Integer.parseInt(strs[3]);
int e = Integer.parseInt(strs[4]);
int f = Integer.parseInt(strs[5].substring(0, 2));
timeseries.add(new Second(f, e, d, c, b, a), df.getAcekh());
}

TimeSeries timeseries2 = new TimeSeries("波動上限",
org.jfree.data.time.Second.class);
for (int i = 0; i < hbaceList.size(); i++) {
DapfIstanceView df = (DapfIstanceView) hbaceList.get(i);
String[] strs = df.getDatetime().split("[- :]");
int a = Integer.parseInt(strs[0]);
int b = Integer.parseInt(strs[1]);
int c = Integer.parseInt(strs[2]);
int d = Integer.parseInt(strs[3]);
int e = Integer.parseInt(strs[4]);
int f = Integer.parseInt(strs[5].substring(0, 2));
timeseries2.add(new Second(f, e, d, c, b, a), 200);
}

TimeSeries timeseries3 = new TimeSeries("波動下限",
org.jfree.data.time.Second.class);
for (int i = 0; i < hbaceList.size(); i++) {
DapfIstanceView df = (DapfIstanceView) hbaceList.get(i);
String[] strs = df.getDatetime().split("[- :]");
int a = Integer.parseInt(strs[0]);
int b = Integer.parseInt(strs[1]);
int c = Integer.parseInt(strs[2]);
int d = Integer.parseInt(strs[3]);
int e = Integer.parseInt(strs[4]);
int f = Integer.parseInt(strs[5].substring(0, 2));
timeseries3.add(new Second(f, e, d, c, b, a), -200);
}
dataset.addSeries(timeseries);
dataset.addSeries(timeseries2);
dataset.addSeries(timeseries3);
return dataset;

} catch (Exception e) {
e.printStackTrace();
}
return null;
}

private static IntervalXYDataset createVolumeDataset(List dwplList) {
try {
TimeSeries timeseries = new TimeSeries("頻率",
org.jfree.data.time.Second.class);
for (int i = 0; i < dwplList.size(); i++) {
DapfIstanceView df = (DapfIstanceView) dwplList.get(i);
String[] strs = df.getDatetime().split("[- :]");
int a = Integer.parseInt(strs[0]);
int b = Integer.parseInt(strs[1]);
int c = Integer.parseInt(strs[2]);
int d = Integer.parseInt(strs[3]);
int e = Integer.parseInt(strs[4]);
int f = Integer.parseInt(strs[5].substring(0, 2));
timeseries.add(new Second(f, e, d, c, b, a), df.getFvalue());
}
return new TimeSeriesCollection(timeseries);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}

相關推薦

JfreeChartY折線

折騰好久,都沒有找到一個自己想要的例子,無奈,為了專案,只能找資料自己慢慢拼湊了,功夫不負有心人,終於被我拼出了一個理想中的圖。回頭想想,其實只需要耐心的測試,也沒什麼難……/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyrigh

EchartsY折線和柱形混合

柱形圖和折線圖混合使用,並且使用雙y軸座標 具體程式碼如下 option ={ color: ['#009CFF', '#FF072F'], //設定多個顏色值時代表的是圖例顏色 tooltip: { trigger

python繪製Y折線以及單Y變數柱狀

      近來實驗室的師姐要發論文,由於論文交稿時間臨近,有一些雜活兒需要處理,作為實驗室資歷最淺的一批,我這個實習生也就責無旁貸地幫忙當個下手。今天師姐派了一個小活,具體要求是:      給一些訓練模型的迭代次數,訓練精度的資料,讓我做成圖表形式展示出來,一方面幫助檢查

自制echartsy折線

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=dev

pythony影象

很多時候可能需要在一個圖中畫出多條函式影象,但是可能y軸的物理含義不一樣,或是數值範圍相差較大,此時就需要雙y軸。 matplotlib和seaborn都可以畫雙y軸影象。一個例子: import seaborn as sns import matplotlib.pypl

Jfreechart中文API及Y座標的折線

 JFreeChart目前是最好的java圖形解決方案,基本能夠解決目前的圖形方面的需求,下面給出的是JFreeChart API中文文件,同時也給出了官方英文的API連結。     JFreeChart目前是最好的java圖形解決方案,基本能夠解決目前的圖形方面的需求,主

Highcharts Y, 柱形,線條組合

一 程式碼 <html> <head> <meta charset="UTF-8" /> <title>Highcharts 雙Y軸, 柱形圖,線條圖組合</title> <script src="http://ap

Echarts3例項 Y柱狀

實現效果 知識點 雙Y軸:yAxisIndex Y軸垂直標題 最大最小值顯示 調整左側Y軸刻度 程式碼實現 option == { title: { text: '2018年管線設施分類統計',

使用jfreechart統計資料,生成折線(座標x,y值大小可以自己設定)

需求:一個目錄下包含多個txt檔案,每個txt檔案每行儲存一個數據,根據每個txt檔案的資料生成一個折線圖,y軸為每行的資料,x軸表示第幾行。 b.建立新的java工程時,依賴這2個jar包。 c.相關jfreechart介紹: org.jfree.chart.Char

Android——利用Achartengine製作趨勢(含Y,浮窗)

  Achartengine是Android平臺上一款很強大的繪圖工具,能夠實現很多複雜的效果圖,但由於大部分入門者沒有耐心仔細檢視它的庫函式,所以在使用時常常捉襟見肘。本文試圖以應用中時常出現的歷史趨勢圖為例,來幫助讀者加深對Achartengine的認識與理解。首先看一

Jfreechart折線

import java.awt.Color; import java.awt.Font; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.cha

HTML畫布canvas帶有圓圈的折線(補充3)

補充2在上一畫圖原文中,只不過查詢語句改了下,如下為多表查詢後結果,因多表分組查詢前x個的sql程式碼實在複雜,故先按多表查 php都是查詢語句,不貼 下為html <!DOCTYPE html> <html> <head> <me

python matplotlib Y 以及 曲線標誌位置

import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 5, 0.1) # 生成一個numpy陣列物件,0到5,間隔為0.1 y1 = np.sin(x) y2 = np.cos(x) p

echarts 三種資料y顯示 (文末附帶完整程式碼)

1、展示效果: 2、程式碼說明: 3、完整程式碼   <div id="trmmEcharts"  class="echartsDiv"></div> <script type="text/javascript">  

highcharts.js的時間折線

工作中正好用到。  滑鼠按住左鍵 左右移動可以試試 <!DOCTYPE> <html lang='en'> <head> <title>4-Highcharts曲線圖之時間軸折線圖</title> <meta h

python matplotlib 繪製Y曲線圖

要點就是ax2 = ax1.twinx(), 製作一個兄弟軸。程式碼如下: import matplotlib.pyplot as plt import numpy as np x = np.ara

HighChar 詳解-Y-及各

    網上的例子,資料都是寫死的,有點不實用吧 我在這裡舉一個,展示功能需求的資料。按需從資料庫獲取並畫圖展示  (本例子結合 angular.js,其他前臺框架同理 從後臺獲取資料即可) 1.首先要引入Jquery.JS,再引入相關highChar.js 如果結合前臺框

unity利用Image直線,以及折線

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 掛載在parent上 /// </summ

python繪製Y時間序列資料曲線圖

花了一天摸索出來的,在python上面畫雙Y軸的時間序列資料的曲線圖。網上大多數繪製雙Y軸曲線圖的不是時間序列曲線圖。我這裡用到兩個包,pandas和matplotlib.pyplot包。畫時間序列的時候,用pandas包的method,結合plt包使用,這個就需要我的資料以

echarts實現y,並實現不同的引數使用不同的y

需求:折線圖實現雙y軸,並實現不同的引數使用不同的y軸 方法: 1、yAxis中新增雙軸 [{type: 'value',name: '溫度',axisLabel: {formatter: '{value}℃' } },{type: 'value',name: '百分比',