2015年3月15日 星期日

jQuery Mobile - jqPlot (6)

儀錶圖 (Meter Gauge)

儀錶圖 (Meter Gauge) 如同汽車儀錶板,以半圓形的刻度顯示範圍值,儀錶圖常用以顯示值。此外,儀錶圖常搭配區間顏色,以顏色區分不同的範圍值。

為能執行儀錶圖,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案,與折線圖不同的是,需額外匯入jqplot.meterGaugeRenderer.min.js以繪製儀錶圖:
 







其程式部份如下,其中設定頁面ID為metergauge、圖表ID為chart (可自行命名),以做為繪製圖表的依據:
為設定圖表內容,在metergauge.js檔案中分別定義以下內容:
// Enable Plugins
$.jqplot.config.enablePlugins = true;

var options = {
  title: 'Sales',

  legend: {
    show: true,
    location: 'ne',
    rendererOptions: {
      numberRows: 1
    }
  },

  axes: {
    xaxis: {
      autoscale:true,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
      tickInterval: 1,
    },
    yaxis: {
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
      tickOptions:{prefix: '$'}
    }
  },
  cursor:{zoom:true}
};

$(document).on("pageshow","#metergauge",function(e){
  options['seriesDefaults']={fill:true};

  meterplot = $.jqplot('chart',[[375]],{
    title: 'Sales',
    seriesDefaults: {
      renderer: $.jqplot.MeterGaugeRenderer,
      rendererOptions: {
        label: 'US$',
        min: 0,
        max: 500,
        intervals:[50, 150, 300, 500],
        intervalColors:['#FF0000', '#FF6600', '#FFFF66', '#00FF00']
      }
    },
    cursor:{zoom:true}
  });
});

$(window).on("orientationchange",function(ui,e){
  meterplot.replot();
});

$(document).on("pagehide","#metergauge",function(e){
  meterplot.destroy();
});
分別設定儀錶圖的標籤 (label)、最小值 (min)、最大值 (max)、區間 (intervals)、區間顏色 (intervalColors):
seriesDefaults: {
  renderer: $.jqplot.MeterGaugeRenderer,
  rendererOptions: {
    label: 'US$',
    min: 0,
    max: 500,
    intervals:[50, 150, 300, 500],
    intervalColors:['#FF0000', '#FF6600', '#FFFF66', '#00FF00']
  }
},
【執行結果】

以下為以Android智慧型手機瀏覽器執行的儀錶圖:
以下為以Apple iPad平版電腦瀏覽器執行的儀錶圖:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] jqPlot:http://www.jqplot.com

© Chia-Hui Huang

jQuery Mobile - jqPlot (5)

泡泡圖 (Bubble Chart)

泡泡圖 (Bubble Chart) 為散佈圖的變化,泡泡圖常用以顯示財務資料,座標點以泡泡呈現,並以泡泡大小強調數值的大小。

為能執行泡泡圖,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案,與折線圖不同的是,需額外匯入jqplot.bubbleRenderer.min.js以繪製泡泡圖:
 







其程式部份如下,其中設定頁面ID為bubblechart、圖表ID為chart (可自行命名),以做為繪製圖表的依據:
為設定圖表內容,在bubblechart.js檔案中分別定義以下內容:
var bubbledata = [
  [11, 123, 1236, "iPhone"], 
  [45,  92, 1067, "iPod Touch"], 
  [24, 104, 1176, "MacBook Air"], 
  [50,  23,  610, "iPad"], 
  [18,  17,  539, "iMac"], 
  [ 7,  89,  864, "New iPad"], 
  [ 2,  13, 1026, "iPad Air"]
];

// Enable Plugins
$.jqplot.config.enablePlugins = true;

var options = {
  title: '2014 Sales by Product',
  
  seriesDefaults:{
    renderer: $.jqplot.BubbleRenderer,
    rendererOptions: {
      bubbleGradients: true,
      bubbleAlpha: 0.6,
      highlightAlpha: 0.8
    },
    shadow: true,
    shadowAlpha: 0.05
  },
  
  axes: {
    xaxis: {
      label:'Sales',
      labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
      tickOptions:{angle:-45}
    },
    yaxis: {
      label:'US$',
      labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    }
  },
  cursor:{zoom:true}
};

$(document).on("pageshow","#bubblechart",function(e){
  bubbleplot = $.jqplot("chart", bubbledata, options);
});

$(window).on("orientationchange",function(ui,e){
  bubbleplot.replot();
});

$(document).on("pagehide","#bubblechart",function(e){
  bubbleplot.destroy();
});
圖表的選項與格式,分別設定如下,例如圖表標題 (Title):
title: '2014 Sales by Product',
設定泡泡圖的預設值:
seriesDefaults:{
  renderer: $.jqplot.BubbleRenderer,
  rendererOptions: {
    bubbleGradients: true,
    bubbleAlpha: 0.6,
    highlightAlpha: 0.8
  },
  shadow: true,
  shadowAlpha: 0.05
},
設定座標軸 (Axis) 的標籤 (label)、刻度標籤的旋轉角度 (angle):
axes: {
  xaxis: {
    label:'Sales',
    labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    tickOptions:{angle:-45}
  },
  yaxis: {
    label:'US$',
    labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
  }
},
【執行結果】

以下為以Android智慧型手機瀏覽器執行的泡泡圖:
以下為以Apple iPad平版電腦瀏覽器執行的泡泡圖:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] jqPlot:http://www.jqplot.com

© Chia-Hui Huang

jQuery Mobile - jqPlot (4)

OHLC圖 (Open-High-Low-Close Chart)

OHLC圖 (Open-High-Low-Close Chart) 又稱為股票圖、技術分析圖或美國線,是以豎立的線條表現股票價格的變化,並呈現開盤價、最高價、最低價與收盤價,豎線呈現最高價和最低價間的價差間距,左側橫線代表開盤價,右側橫線代表收盤價,繪製上較K線圖簡單。 另外還有最高價-最低價-收盤價、成交量-最高價-最低價-收盤價、成交量-開盤價-最高價-最低價-收盤價等三種呈現方式。

為能執行OHLC圖,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案,與折線圖不同的是,需額外匯入jqplot.ohlcRenderer.min.js以繪製OHLC圖:
 







其程式部份如下,其中設定頁面ID為ohlcchart、圖表ID為chart (可自行命名),以做為繪製圖表的依據:
為設定圖表內容,在ohlcchart.js檔案中分別定義以下內容:
var ohlcdata = [[
  ['08/30/2014 13:00:00', 114.94, 120, 113.28, 119.57],
  ['08/29/2014 13:00:00', 104.51, 116.13, 102.61, 115.99],
  ['08/28/2014 13:00:00', 102.71, 109.98, 101.75, 106.85],
  ...
]];

// Enable Plugins
$.jqplot.config.enablePlugins = true;

var options = {
  title: "2014年8月份股市趨勢圖",
  
  series: [{
    renderer:$.jqplot.OHLCRenderer,
    rendererOptions:{ 
      candleStick:false 
    }
  }],

  axes: {
    xaxis: {
      label:'Date',
      renderer:$.jqplot.DateAxisRenderer,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
      tickOptions:{formatString:'%m/%d',angle:-90},
      tickInterval: "1 days",
      min: "8-01-2014",
      max: "8-31-2014",
    },
    yaxis: {
      label:'$',
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
      tickOptions:{formatString:'%d',angle:0}
    }
  },

  highlighter: {
    show: true,
    showMarker:false,
    tooltipAxes: 'xy',
    yvalues: 4,
    formatString:'
日期:%s
開盤:%s
最高:%s
最低:%s
收盤:%s
' }, cursor:{zoom:true} }; $(document).on("pageshow","#ohlcchart",function(e){ ohlcplot = $.jqplot("chart", ohlcdata, options); }); $(window).on("orientationchange",function(ui,e){ ohlcplot.replot(); }); $(document).on("pagehide","#ohlcchart",function(e){ ohlcplot.destroy(); });
圖表的選項與格式,分別設定如下,例如圖表標題 (Title):
title: "2014年8月份股市趨勢圖",
設定座標軸 (Axis) 的標籤 (label)、刻度區間 (tickInterval)、刻度的最小值 (min)、刻度的最大值 (max):
axes: {
  xaxis: {
    label:'Date',
    renderer:$.jqplot.DateAxisRenderer,
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    tickOptions:{formatString:'%m/%d',angle:-90},
    tickInterval: "1 days",
    min: "8-01-2014",
    max: "8-31-2014",
  },
  yaxis: {
    label:'$',
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    tickOptions:{formatString:'%d',angle:0}
  }
},
此外,為處理當以手指或滑鼠移至數據標記上方時顯示日期、開盤、最高、最低與收盤價等資訊,範例加入highlighter屬性:
highlighter: {
  show: true,
  showMarker:false,
  tooltipAxes: 'xy',
  yvalues: 4,
  formatString:'
日期:%s
開盤:%s
最高:%s
最低:%s
收盤:%s
' },
【執行結果】

以下為以電腦瀏覽器執行的OHLC圖,當以滑鼠移至數據標記上方時,則以表格顯示日期、開盤、最高、最低與收盤價等資訊:
以下為以Android智慧型手機瀏覽器執行的OHLC圖:
燭台圖 (Candlestick Chart)

燭台圖 (Candlestick Chart) 是OHLC圖的另一種呈現方式,同樣需在<head></head>網頁標籤部份匯入jqplot.ohlcRenderer.min.js:
 







燭台圖的幾乎與OHLC圖一樣,差別僅在於需加入candleStick選項以設定燭台圖:
series: [{
  renderer:$.jqplot.OHLCRenderer,
  rendererOptions:{   
    candleStick:true 
  }
}],
【執行結果】

以下為以電腦瀏覽器執行的燭台圖,當以滑鼠移至數據標記上方時,則以表格顯示日期、開盤、最高、最低與收盤價等資訊:
以下為以Android智慧型手機瀏覽器執行的燭台圖:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] jqPlot:http://www.jqplot.com

© Chia-Hui Huang

jQuery Mobile - jqPlot (3)

長條圖 (Bar Chart)

長條圖 (Bar Chart) 用以顯示一段時間內資料的變化或比較不同項目間的差異,可分為水平長條圖、垂直長條圖與堆疊長條圖。

為能執行長條圖,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案,與折線圖不同的是,需額外匯入jqplot.barRenderer.min.js與jqplot.categoryAxisRenderer.min.js以繪製長條圖:
 








其程式部份如下,其中設定頁面ID為barchart、圖表ID為chart (可自行命名),以做為繪製圖表的依據:
為設定圖表內容,在barchart.js檔案中分別定義以下內容:
var bardata  = [
  [150,290,215,315], // Series 1
  [110,480,106,285], // Series 2
  [430,368,115,162], // Series 3
  [152,412,311,223]  // Series 4
];

// Enable Plugins
$.jqplot.config.enablePlugins = true;

var options = {
  title:'Regional Sales',
  
  seriesDefaults: {
    renderer: $.jqplot.BarRenderer,
    shadowAngle: 45
  },

  series: [
    {label:'2011',color:'#2562AD'},
    {label:'2012',color:'#FF0022'},
    {label:'2013',color:'#FFFF66'},
    {label:'2014',color:'#33DA22'},
  ],

  legend: {
    show: true,
    location: 'ne',
  },

  axes: {
    xaxis: {
      label:'Region',
      renderer: $.jqplot.CategoryAxisRenderer,
      ticks: ['East','West','North','South'],
    },
    yaxis: {
      label:'US$',
      min:0,
      max:500,
      labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    }
  },

  cursor:{zoom:true}
};

$(document).on("pageshow","#barchart",function(e){
  barplot = $.jqplot("chart", bardata, options);
});

$(window).on("orientationchange",function(ui,e){
  barplot.replot();
});

$(document).on("pagehide","#barchart",function(e){
  barplot.destroy();
});
以下程式分別設定當顯示頁面時則繪製圖表 (pageshow)、當手機或平版電腦改變方向時 (orientationchange)、當隱藏或關閉頁面時 (pagehide),其中barchart與chart分別為前述之頁面ID與圖表ID,以做為繪製圖表的依據:
$(document).on("pageshow","#barchart",function(e){
  barplot = $.jqplot("chart", bardata, options);
});

$(window).on("orientationchange",function(ui,e){
  barplot.replot();
});

$(document).on("pagehide","#barchart",function(e){
  barplot.destroy();
});
圖表數例以下列方式設定,共有四組長條數例:
var bardata  = [
  [150,290,215,315], // Series 1
  [110,480,106,285], // Series 2
  [430,368,115,162], // Series 3
  [152,412,311,223]  // Series 4
];
此外圖表的選項與格式,分別設定如下,例如圖表標題 (Title):
title:'Regional Sales',
設定各長條數例的預設值如陰影角度 (shadowAngle):
seriesDefaults: {
  renderer: $.jqplot.BarRenderer,
  shadowAngle: 45
},
設定各長條數例的標籤 (label) 與顏色 (color):
series: [
  {label:'2011',color:'#2562AD'},
  {label:'2012',color:'#FF0022'},
  {label:'2013',color:'#FFFF66'},
  {label:'2014',color:'#33DA22'},
],
設定圖例 (Legend) 的置放位置 (location) 與是否顯示圖例 (show):
legend: {
  show: true,
  location: 'ne',
},
設定座標軸 (Axis) 的標籤 (label)、刻度標籤 (ticks)、刻度的最小值 (min)、刻度的最大值 (max):
axes: {
  xaxis: {
    label:'Region',
    renderer: $.jqplot.CategoryAxisRenderer,
    ticks: ['East','West','North','South'],
  },
  yaxis: {
    label:'US$',
    min:0,
    max:500,
    labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
  }
},
【執行結果】

以下為以Android智慧型手機瀏覽器執行的垂直長條圖,由於智慧型手機直立時,畫面較窄,因此圖表會自動調整長寬比例:
以下為以Apple iPad平版電腦瀏覽器執行的垂直長條圖,由於平版電腦橫向時,畫面較寬,因此可得到較佳的效果:
水平長條圖 (Horizontal Bar Chart)

水平長條圖 (Horizontal Bar Chart) 的設定幾乎與垂直長條圖一樣,差別僅在於需加入barDirection選項以設定長條圖的方向:
seriesDefaults: {
  renderer: $.jqplot.BarRenderer,
  shadowAngle: 45,
  rendererOptions: {
    barDirection: 'horizontal'
  }
},
【執行結果】

以下為以Android智慧型手機瀏覽器執行的水平長條圖:
以下為以Apple iPad平版電腦瀏覽器執行的水平長條圖:
堆疊長條圖 (Stack Bar Chart)

堆疊長條圖 (Stack Bar Chart) 的設定幾乎與垂直長條圖一樣,差別僅在於需加入stackSeries選項以設定為堆疊長條圖:
stackSeries: true,
【執行結果】

以下為以Android智慧型手機瀏覽器執行的堆疊長條圖:
以下為以Apple iPad平版電腦瀏覽器執行的堆疊長條圖:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] jqPlot:http://www.jqplot.com

© Chia-Hui Huang

jQuery Mobile - jqPlot (2)

圓形圖 (Pie Chart)

圓形圖 (Pie Chart) 又稱為圓餅圖,圓形圖將圖表劃分成幾個不同比例的扇形區域 (Slice),藉以描述量、頻率或百分比之間的相對關係,在圓形圖中,每個扇形區域的面積大小代表數量的比例,由於圓形圖以面積取代長度表達相對關係,反而加大了對各數據比較的難度,因此若需要進行數據比較,建議使用折線圖或長條圖。

為能執行圓形圖,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案,與折線圖不同的是,需額外匯入jqplot.pieRenderer.min.js以繪製圓形圖:
 







其程式部份如下,其中設定頁面ID為piechart、圖表ID為chart (可自行命名),以做為繪製圖表的依據:
至於圖表內容,jqPlot是以額外的JavaScript設定,可定義於同一HTML網頁中或其他的JavaScript檔案,若為後者,則需在<head></head>網頁標籤部份匯入,例如一名為piechart.js檔案,則如下匯入JavaScript檔案:

為設定圖表內容,在piechart.js檔案中分別定義以下內容:
$.jqplot.config.enablePlugins = true;

$(document).on('pageshow','#piechart',function(e){
  var piedata = [
    ['New iPad',    3850],
    ['iPhone',      5700],
    ['MacBook Air', 2000],
    ['iMac',        1200]
  ];

  var opts = {
    title:'2014 Sales Data',
    
    seriesDefaults: {
      renderer: jQuery.jqplot.PieRenderer, 
      rendererOptions: {
        showDataLabels: true,
        padding: 8
      }
    },
    
    legend :{ 
      show:true, 
      location: 'e',
      rendererOptions: {
        numberRows: 4
      },
    }
  }

  pieplot = $.jqplot('chart', [piedata], opts);
});

$(window).on("orientationchange", function(e){
  pieplot.replot();
});

$(document).on("pagehide", "#piechart", function(e){
  pieplot.destroy();
});
以下程式分別設定當顯示頁面時則繪製圖表 (pageshow)、當手機或平版電腦改變方向時 (orientationchange)、當隱藏或關閉頁面時 (pagehide),其中piechart與chart分別為前述之頁面ID與圖表ID,以做為繪製圖表的依據:
$(document).on('pageshow','#piechart',function(e){
  ...
  pieplot = $.jqplot('chart', [piedata], opts);
});

$(window).on("orientationchange", function(e){
  pieplot.replot();
});

$(document).on("pagehide", "#piechart", function(e){
  pieplot.destroy();
});
圖表數例以下列方式設定,共有四個扇形區域:
var piedata = [
  ['New iPad',    3850],
  ['iPhone',      5700],
  ['MacBook Air', 2000],
  ['iMac',        1200]
];
此外圖表的選項與格式,分別設定如下,例如圖表標題 (Title):
title:'2014 Sales Data',
設定各扇形區域的預設值:
seriesDefaults: {
  renderer: jQuery.jqplot.PieRenderer, 
  rendererOptions: {
    showDataLabels: true,
    padding: 8
  }
},
設定圖例 (Legend) 的置放位置 (location)、是否顯示圖例 (show)、圖例列數 (numberRows):
legend :{ 
  show:true, 
  location: 'e',
  rendererOptions: {
    numberRows: 4
  },
}
【執行結果】

以下為以Android智慧型手機瀏覽器執行的結果:
以下為以Apple iPad平版電腦瀏覽器執行的結果:
分裂式圓形圖 (Slice Pie Chart)

分裂式圓形圖 (Slice Pie Chart) 的設定幾乎與圓形圖一樣,差別僅在於需加入以下選項以分割扇形區域,包括是否填滿扇形區域 (fill)、扇形區域之間的間距 (sliceMargin)、扇形區域的線條寬度 (lineWidth):
seriesDefaults: {
  renderer: jQuery.jqplot.PieRenderer, 
  rendererOptions: {
    fill: true,
    showDataLabels: true, 
    sliceMargin: 10, 
    lineWidth: 2
  }
},
【執行結果】

以下為以Android智慧型手機瀏覽器執行的結果:
以下為以Apple iPad平版電腦瀏覽器執行的結果:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] jqPlot:http://www.jqplot.com

© Chia-Hui Huang

2015年3月14日 星期六

jQuery Mobile - jqPlot (1)

圖表 (Chart) 常運用於試算表如Microsoft Excel, Mac Numbers, Apache OpenOffice Calc等辦公室軟體,透過圖表讓資料以更簡單明瞭的方式呈現。此外,圖表亦常與商業智慧 (Business Intelligence) 搭配,透過商業智慧軟體與資料庫或資料倉儲整合,提供向下分析與互動功能的動態圖表,根據指標在特定期間的變化,以動態的方式呈現資訊,使圖表產生更多樣化的呈現,常見的商業智慧軟體有SAP BusinessObjects, SAS Business Intelligence, Oracle Business Intelligence, IBM Cognos, Microsoft ProClarity, MicroStrategy等。

jQuery Mobile並沒有提供圖表功能,不過網路上有許多高手提供免費的Plugin,免去自行開發的困擾。此次要介紹的是由Chris Leonello所開發的jqPlot,jqPlot提供豐富的圖表功能,包括:

  • 折線圖 (Line Chart)
  • 區域折線圖 (Interval Line Chart)
  • 圓形圖 (Pie Chart)
  • 分裂式圓形圖 (Slice Pie Chart)
  • 長條圖 (Bar Chart)
  • 水平長條圖 (Horizontal Bar Chart)
  • 堆疊長條圖 (Stack Bar Chart)
  • 區域圖 (Area Chart)
  • 組合圖 (Combination Chart)
  • OHLC圖 (Open-High-Low-Close Chart)
  • 燭台圖 (Candlestick Chart)
  • 泡泡圖 (Bubble Chart)
  • 儀錶圖 (Meter Gauge)
jqPlot可自http://www.jqplot.com下載,將zip解壓縮至jQuery Mobile的相關目錄,為能執行jqPlot,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案:
  • jquery.jqplot.min.css
  • jquery.jqplot.min.js
  • jqplot.mobile.min.js
並依圖表格式與功能,需匯入以下檔案:
  • 設定文字:jqplot.canvasTextRenderer.min.js
  • 設定圖例:jqplot.canvasAxisLabelRenderer.min.js
  • 設定座標軸:jqplot.dateAxisRenderer.min.js
  • 設定座標軸刻度:jqplot.canvasAxisTickRenderer.min.js
  • 處理遊標事件:jqplot.cursor.min.js
透過以上檔案則可產生折線圖,其餘圖表依不同的圖表類型,需額外匯入以下檔案:
  • 圓形圖:jqplot.pieRenderer.min.js
  • 長條圖:jqplot.barRenderer.min.js, jqplot.categoryAxisRenderer.min.js
  • OHLC圖:jqplot.ohlcRenderer.min.js
  • 蠟燭圖:jqplot.ohlcRenderer.min.js
  • 泡泡圖:jqplot.bubbleRenderer.min.js
  • 儀錶圖:jqplot.meterGaugeRenderer.min.js

折線圖 (Line Chart)

折線圖 (Line Chart) 用以顯示一段時間內的連續資料,且依據一定的比例進行設定,因此適合顯示相等間隔內資料的趨勢,在折線圖中,類別資料沿著水平座標軸均勻分散,所有資料沿著垂直座標軸均勻分散。

為能執行折線圖,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下檔案:
 






其程式部份如下,其中設定頁面ID為linechart、圖表ID為chart (可自行命名),以做為繪製圖表的依據:
至於圖表內容,jqPlot是以額外的JavaScript設定,可定義於同一HTML網頁中或其他的JavaScript檔案,若為後者,則需在<head></head>網頁標籤部份匯入,例如一名為linechart.js檔案,則如下匯入JavaScript檔案:

為設定圖表內容,在linechart.js檔案中分別定義以下內容:
var data = [
  [[2000, 2.00],[2001,10.00],[2002,13.00],[2003,18.00],
   [2004,28.00],[2005,17.00],[2006,23.00],[2007,25.00],
   [2008,35.00],[2009,22.00],[2010,28.00]
  ], // Series 1
  [[2000, 7.00],[2001,18.00],[2002,20.00],[2003,29.00],
   [2004,20.00],[2005,11.00],[2006,18.00],[2007,29.00],
   [2008,33.00],[2009,27.00],[2010,25.00]
  ]  // Series 2
];
  
$.jqplot.config.enablePlugins = true;

var options = {

  title: 'Sales Trend',

  series: [
    {
      label:'Market',
      color:'#0000FF',
      showMarker:true
    },
    {
      label:'Sales',
      color:'#FF0000',
      showMarker:true,
    },
  ],

  legend: {
    show:true,
    showSwatches:true,
    textColor:'#FFFFFF',
    fontSize:12,
    location:'se'      
  },

  axes: {
    xaxis: {
      label:'Year',
      labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
      tickOptions:{angle:-90}
    },
    yaxis: {
      label:'US$',
      min:0,
      max:40,
      labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    }
  },
  cursor:{zoom:true}
};

$(document).on("pageshow", "#linechart", function(e){
  plot = $.jqplot("chart", data, options);
});

$(window).on("orientationchange", function(e){
  plot.replot();
});

$(document).on("pagehide", "#linechart", function(e){
  plot.destroy();
});
以下程式分別設定當顯示頁面時則繪製圖表 (pageshow)、當手機或平版電腦改變方向時 (orientationchange)、當隱藏或關閉頁面時 (pagehide),其中linechart與chart分別為前述之頁面ID與圖表ID,以做為繪製圖表的依據:
$(document).on("pageshow", "#linechart", function(e){
  plot = $.jqplot("chart", data, options);
});

$(window).on("orientationchange", function(e){
  plot.replot();
});

$(document).on("pagehide", "#linechart", function(e){
  plot.destroy();
});
圖表數例以下列方式設定:
var data = [
  [[2000, 2.00],[2001,10.00],[2002,13.00],[2003,18.00],
   [2004,28.00],[2005,17.00],[2006,23.00],[2007,25.00],
   [2008,35.00],[2009,22.00],[2010,28.00]
  ], // Series 1
  [[2000, 7.00],[2001,18.00],[2002,20.00],[2003,29.00],
   [2004,20.00],[2005,11.00],[2006,18.00],[2007,29.00],
   [2008,33.00],[2009,27.00],[2010,25.00]
  ]  // Series 2
];
此外圖表的選項與格式,分別設定如下,例如圖表標題 (Title):
title: 'Sales Trend',
設定各資料序列 (Series) 的標籤 (label)、線條顏色 (color)、是否顯示線條標記 (showMarker):
series: [
  {
    label:'Market',
    color:'#0000FF',
    showMarker:true
  },
  {
    label:'Sales',
    color:'#FF0000',
    showMarker:true
  },
],
設定圖例 (Legend) 的文字顏色 (textColor)、字型大小 (fontSize)、置放位置 (location)、是否顯示圖例 (show)、是否顯示色板 (showSwatches):
legend: {
  show:true,
  showSwatches:true,
  textColor:'#FFFFFF',
  fontSize:12,
  location:'se'
},
設定座標軸 (Axis) 的標籤 (label)、刻度標籤的旋轉角度 (angle)、刻度的最小值 (min)、刻度的最大值 (max):
axes: {
  xaxis: {
    label:'Year',
    labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
    tickOptions:{angle:-90}
  },
  yaxis: {
    label:'US$',
    min:0,
    max:40,
    labelRenderer:$.jqplot.CanvasAxisLabelRenderer,
    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
  }
},
【執行結果】

以下為以Android智慧型手機瀏覽器執行的結果,由於智慧型手機直立時,畫面較窄,因此圖表會自動調整長寬比例:
以下為以Apple iPad平版電腦瀏覽器執行的結果,由於平版電腦橫向時,畫面較寬,因此可得到較佳的效果:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] jqPlot:http://www.jqplot.com

© Chia-Hui Huang

jQuery Mobile - Transition

jQuery Mobile提供Transition轉場效果,轉場效果是針對瀏覽頁面時,為了強調頁面之間的差異,並突顯頁面內容,所加入的切換效果。jQuery Mobile的Transition轉場效果除了可用於頁面間切換之外,亦可用於顯示對話框 (Dialog)。

jQuery Mobile提供以下的轉場效果:

屬性 轉場效果
data-transition="fade" 淡入淡出
data-transition="flip" 反轉
data-transition="flow" 流動
data-transition="pop" 突顯
data-transition="slide" 滑動
data-transition="slidedown" 向下滑動
data-transition="slidefade" 淡入淡出滑動
data-transition="slideup" 向上滑動
data-transition="turn" 旋轉

使用上相當簡單,分別由以下屬性設定,欲處理對話框的切換效果,只需額外加上data-rel="dialog"屬性:
  • 頁面間切換:data-transition="..."。
  • 顯示對話框:data-rel="dialog" data-transition="..."。
以下範例以淡入淡出效果切換頁面:

以下範例以滑動效果顯示對話框:

是不是很簡單呢?

【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com

© Chia-Hui Huang

jQuery Mobile - Slideshow

網路有很多高手提供jQuery Mobile Plugin,此次要介紹的是由Manuel Masia (Pixedelic.com) 所開發的Camera,用於瀏覽相片,Camera會產生如同幻燈片的效果。

Camera可自http://www.pixedelic.com/plugins/camera/ jQuery Mobile提供Transition轉場效果,轉場效果是針對瀏覽頁面時,為了強調頁面之間的差異,並突顯頁面內容,所加入的切換效果。jQuery Mobile的Transition轉場效果除了可用於頁面間切換之外,亦可用於顯示對話框 (Dialog)。


jQuery Mobile提供以下的轉場效果:

屬性 轉場效果
data-transition="fade" 淡入淡出
data-transition="flip" 反轉
data-transition="flow" 流動
data-transition="pop" 突顯
data-transition="slide" 滑動
data-transition="slidedown" 向下滑動
data-transition="slidefade" 淡入淡出滑動
data-transition="slideup" 向上滑動
data-transition="turn" 旋轉

使用上相當簡單,分別由以下屬性設定,欲處理對話框的切換效果,只需額外加上data-rel="dialog"屬性:
  • 頁面間切換:data-transition="..."。
  • 顯示對話框:data-rel="dialog" data-transition="..."。
以下範例以淡入淡出效果切換頁面:

以下範例以滑動效果顯示對話框:

是不是很簡單呢?

【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com

© Chia-Hui Huang

2015年3月10日 星期二

JavaFX 8技術手冊 (Google Play電子書)

今天 (2015-03-10) 上架的電子書 –「JavaFX 8技術手冊」,透過Google Play發行,電子書似乎是現在的趨勢。

URL: http://goo.gl/wX4k2g
© Chia-Hui Huang

2015年3月8日 星期日

jQuery Mobile - Theme

jQuery Mobile以data-theme屬性設定主題 (Theme),主題分別由A到Z,稱為Swatch (色板),其中A與B為內建主題 (預設為A),C到Z為使用者自訂主題,可透過ThemeRoller設定主題中各物件的顏色、字型、圖示、陰影等。

data-theme屬性相當彈性,可置於任何data-role部份,以下範例將data-theme="a"屬性置於page部份,因此全頁之物件均為同一主題:

Back

Theme A

Setting ...
...
...
【執行結果】
以下範例將全頁主題設為B:
Back

Theme B

Setting ...
...
...
【執行結果】
亦可針對頁首、內文、頁尾或個別物件設定主題,例如:
Back

Theme

【執行結果】
除了內建主題之外,目前有以下3rd Party的主題可供使用:
  • Native Droid Theme.
  • Android Theme.
  • iOS Theme.
  • Graphite.
  • BlackBerry 10 Theme.
  • Metro Theme for Windows Phone.
  • Twitter Bootstrap jQuery Mobile Theme.
  • Flat UI Theme.
  • Square UI Theme.

Native Droid Theme

以Native Droid Theme為例,可自http://nativedroid.godesign.ch下載nativeDroid-latest.zip檔案,並將zip解壓縮至jQuery Mobile的相關目錄,為能執行Native Droid Theme,除了原有jQuery Mobile的css與js檔案之外,另需在<head></head>網頁標籤部份匯入以下Native Droid Theme之css與js檔案:
  • font-awesome.min.css
  • jquerymobile.nativedroid.css
  • jquerymobile.nativedroid.XX.css
  • jquerymobile.nativedroid.color.XXX.css
  • nativedroid.script.js
其中XX分別為light或dark,代表明亮或暗色之主題,可任選其一。XXX分別為blue, green, purple, red, yellow,代表五種不同的物件顏色,可任選其一。例如選擇暗色主題與藍色的物件顏色:
... 














...
接著需將主題設定為B,則屬性為data-theme="b":
...
【執行結果】

下圖為暗色主題與藍色的物件顏色之Native Droid Theme:
以此類推,以下範例選擇明亮主題與紅色的物件顏色:
... 














...
並將data-theme="b"屬性置於page部份:
...
【執行結果】

下圖為明亮主題與紅色的物件顏色之Native Droid Theme:
Android Theme

Android Theme是由Jonas Gehring所開發之Android主題,可自https://github.com/jjoe64/jquery-mobile-android-theme下載jquery-mobile-android-theme-master.zip檔案,並將zip解壓縮至jQuery Mobile的相關目錄,為能執行Android Theme,另需在<head></head>網頁標籤部份匯入以下Android Theme之css與js檔案,不過經過實測,目前版本與新版的jQuery Mobile 1.4.5並不相容,無法產生正常的主題效果,建議使用舊版的jQuery Mobile:
  • android-theme.css
  • jquery.mobile.android-theme.js
例如:
... 



...
Android Theme提供A到D四種不同的主題樣式,以下範例將data-theme="a"屬性置於page部份:
...
【執行結果】

下圖依序為A到D之Android Theme:
iOS Theme

iOS Theme是由Tait Brown所開發之iOS主題,可自https://github.com/taitems/iOS-Inspired-jQuery-Mobile-Theme下載iOS-Inspired-jQuery-Mobile-Theme-master.zip檔案,並將zip解壓縮至jQuery Mobile的相關目錄,同時需複製iOS Theme的images目錄。

為能執行iOS Theme,另需在<head></head>網頁標籤部份匯入iOS Theme之styles.css檔案,不過經過實測,目前版本與新版的jQuery Mobile 1.4.5並不相容,無法產生正常的主題效果,建議使用舊版的jQuery Mobile。此外為能在Apple iOS正常執行,另需加入apple-mobile-web-app-capable之設定,例如:

... 



...
並將data-theme="a"屬性置於page部份:
...
【執行結果】

下圖為iOS Theme之示範:
Graphite

Graphite是由Max Lynch, Ben Sperry與Joe Nelson所開發之主題,特色是提供多種主題色彩,包括aloe, candy, melon, mint, royal, sand, slate, water共8種主題色彩。

Graphite可自http://driftyco.github.io/graphite下載graphite-1.3.1_4.zip檔案,並將zip解壓縮至jQuery Mobile的相關目錄,為能執行Android Theme,另需在<head></head>網頁標籤部份匯入jquery.mobile-1.3.1.css檔案。由於Graphite將原有的jquery.mobile-1.3.1.css檔案改為各種主題色彩對應的css檔案,因此不需使用data-theme屬性。


【執行結果】

下圖依序為aloe, candy, melon, mint, royal, sand, slate, water之Graphite Theme:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com
[4] ThemeRoller:http://themeroller.jquerymobile.com
[5] Native Droid Theme:http://nativedroid.godesign.ch
[6] Android Theme:https://github.com/jjoe64/jquery-mobile-android-theme
[6] iOS Theme:https://github.com/taitems/iOS-Inspired-jQuery-Mobile-Theme
[7] Graphite:http://driftyco.github.io/graphite

© Chia-Hui Huang

jQuery Mobile - Navbar

導覽列 (Navigation Bar) 可顯示數個方塊狀的導覽按鈕,以做為導覽之用。jQuery Mobile以<div data-role="navbar">標籤處理導覽列,例如以下範例將導覽列置於內文部份,其中class="ui-btn-active"代表預設按鈕:

【執行結果】
欲恢復頁面的預設按鈕狀態,可加入ui-state-persist標籤,例如:

若導覽按鈕超過五個時,將以並排的方式呈現:

【執行結果】
欲將導覽列置於頁首部份,只需將<div data-role="navbar">標籤置於<div data-role="header">部份則完成,例如:

【執行結果】
以此類推,欲將導覽列置於頁尾部份,只需將<div data-role="navbar">標籤置於<div data-role="footer">部份則完成,例如:

此外,亦可加入預設圖示,但data-iconpos="notext"屬性並沒作用,仍會顯示文字:

【執行結果】
而圖示的位置分別由以下data-iconpos屬性設定,data-iconpos屬性需置於<div data-role="navbar">標籤之中:

屬性 說明
data-iconpos="top" 圖示位於文字的上方
data-iconpos="bottom" 圖示位於文字的下方
data-iconpos="left" 圖示位於文字的左方
data-iconpos="right" 圖示位於文字的右方

例如將圖示位於文字的左方:

【執行結果】
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com

© Chia-Hui Huang

2015年3月7日 星期六

jQuery Mobile - Footer

與頁首一樣,也可以在頁尾部份加入按鈕,但與頁首不同的是,頁尾的按鈕依序由左至右排列,例如:

【執行結果】
亦可加入預設圖示:

【執行結果】
若加入data-iconpos="notext"屬性,則僅顯示圖示:

【執行結果】
此外與頁首不同的是,可使用data-role="controlgroup"屬性,群組數個頁尾按鈕:

【執行結果】
除此之外,亦可使用HTML表單物件,以下範例示範<select>選項:

【執行結果】

右圖為點選選項時的效果:
若內文部份的內容過多時,當向上滑動螢幕時,將導致頁尾部份跟著向下捲動而消失,為避免此情況發生,可加入data-position="fixed"屬性,以固定頁尾部份,以下範例同時固定頁首與頁尾部份:

【執行結果】
特別是在顯示尺寸較大的相片時,固定頁首與頁尾部份,可得到較佳的效果,例如:
【參考資料】

[1] XAMPP:https://www.apachefriends.org
[2] jQuery Mobile:http://jquerymobile.com
[3] jQuery:http://jquery.com

© Chia-Hui Huang