jQueryのjqPlotプラグインで作る複数系列の凡例付き縦棒グラフにおいて、jQuery UIのResizableを併用し、ドラッグ&ドロップで、サイズを変更できるようにする方法。
実装例(サンプル)
実装例(サンプル)の動作について
グラフを囲む実線の四角の右下をドラッグ&ドロップすることで、縦棒グラフ全体のサイズを変更することができる。
凡例内の系列ラベル名をクリックすると、その系列の縦棒グラフを非表示にする。系列ラベル名には訂正線が引かれる。再度クリックすると、元に戻す。
実装例(サンプル)のソースコード
読み込み
パスは、それぞれ、アップロードした場所を指定する。
<script language="javascript" type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script language="javascript" type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
<link rel="stylesheet" href="ui/themes/base/jquery.ui.all.css">
<!--[if lt IE 9]>
<script language="javascript" type="text/javascript" src="excanvas.min.js"></script>
<![endif]-->
<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
<script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="plugins/jqplot.categoryAxisRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="plugins/jqplot.enhancedLegendRenderer.min.js"></script>
<link rel="stylesheet" type="text/css" href="jquery.jqplot.min.css" />
<script language="javascript" type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
<link rel="stylesheet" href="ui/themes/base/jquery.ui.all.css">
<!--[if lt IE 9]>
<script language="javascript" type="text/javascript" src="excanvas.min.js"></script>
<![endif]-->
<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
<script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="plugins/jqplot.categoryAxisRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="plugins/jqplot.enhancedLegendRenderer.min.js"></script>
<link rel="stylesheet" type="text/css" href="jquery.jqplot.min.css" />
読み込むファイル。
- jquery-1.7.1.min.js
- jquery-ui-1.8.12.custom.min.js
- jquery.ui.all.css
- jquery.jqplot.min.js
- jqplot.barRenderer.min.js
- jqplot.categoryAxisRenderer.min.js
- jqplot.enhancedLegendRenderer.min.js
- jquery.jqplot.min.css
JavaScript
<script>
jQuery( function() {
Tokyo = [ [ 'A', 8031624 ], [ 'B', 2942392 ], [ 'C', 1166755 ], [ 'D', 8811831 ], [ 'E', 4323067 ], [ 'F', 1718392 ] ];
Osaka = [ [ 'A', 5919275 ], [ 'B', 2228422 ], [ 'C', 6369703 ], [ 'D', 9916855 ], [ 'E', 5181441 ], [ 'F', 9623963 ] ];
Nagoya = [ [ 'A', 2782943 ], [ 'B', 8612849 ], [ 'C', 1628417 ], [ 'D', 5066818 ], [ 'E', 7536765 ], [ 'F', 1747767 ] ];
var samplePlot = jQuery . jqplot(
'jqPlot-sample',
[
Tokyo, Osaka, Nagoya
],
{
seriesDefaults: {
renderer: jQuery . jqplot . BarRenderer,
},
series: [
{ label: '東京本店' },
{ label: '大阪支店' },
{ label: '名古屋支店' }
],
legend: {
show: true,
placement: 'insideGrid',
location: 'n',
renderer: jQuery . jqplot . EnhancedLegendRenderer,
rendererOptions: {
numberColumns: 3
}
},
axes: {
xaxis: {
renderer: jQuery . jqplot . CategoryAxisRenderer,
}
}
}
);
jQuery( "#resizable" ) . resizable( {
minHeight: 150,
minWidth: 300,
maxHeight: 500,
maxWidth: 600,
} );
jQuery( '#resizable' ) . bind( 'resize', function( event, ui ) {
jQuery( '#jqPlot-sample' ) . height(
jQuery( '#resizable' ) . height() * 1
);
jQuery( '#jqPlot-sample' ) . width(
jQuery( '#resizable' ) . width() * 1
);
samplePlot . replot( { resetAxes: true } );
} );
} );
</script>
jQuery( function() {
Tokyo = [ [ 'A', 8031624 ], [ 'B', 2942392 ], [ 'C', 1166755 ], [ 'D', 8811831 ], [ 'E', 4323067 ], [ 'F', 1718392 ] ];
Osaka = [ [ 'A', 5919275 ], [ 'B', 2228422 ], [ 'C', 6369703 ], [ 'D', 9916855 ], [ 'E', 5181441 ], [ 'F', 9623963 ] ];
Nagoya = [ [ 'A', 2782943 ], [ 'B', 8612849 ], [ 'C', 1628417 ], [ 'D', 5066818 ], [ 'E', 7536765 ], [ 'F', 1747767 ] ];
var samplePlot = jQuery . jqplot(
'jqPlot-sample',
[
Tokyo, Osaka, Nagoya
],
{
seriesDefaults: {
renderer: jQuery . jqplot . BarRenderer,
},
series: [
{ label: '東京本店' },
{ label: '大阪支店' },
{ label: '名古屋支店' }
],
legend: {
show: true,
placement: 'insideGrid',
location: 'n',
renderer: jQuery . jqplot . EnhancedLegendRenderer,
rendererOptions: {
numberColumns: 3
}
},
axes: {
xaxis: {
renderer: jQuery . jqplot . CategoryAxisRenderer,
}
}
}
);
jQuery( "#resizable" ) . resizable( {
minHeight: 150,
minWidth: 300,
maxHeight: 500,
maxWidth: 600,
} );
jQuery( '#resizable' ) . bind( 'resize', function( event, ui ) {
jQuery( '#jqPlot-sample' ) . height(
jQuery( '#resizable' ) . height() * 1
);
jQuery( '#jqPlot-sample' ) . width(
jQuery( '#resizable' ) . width() * 1
);
samplePlot . replot( { resetAxes: true } );
} );
} );
</script>
jqPlotに関するオプション
- seriesDefaults
グラフの種類や、系列の色、太さなど、系列に関する初期設定。
- renderer
系列の生成編集に使うプラグインを指定。
jQuery . jqplot . BarRenderer
: 棒グラフjQuery . jqplot . BezierCurveRenderer
: ベジェ曲線グラフjQuery . jqplot . BlockRenderer
: ブロックチャートjQuery . jqplot . BubbleRenderer
: バブルチャートjQuery . jqplot . DonutRenderer
: ドーナツグラフjQuery . jqplot . MeterGaugeRenderer
: メーターゲージjQuery . jqplot . MekkoRenderer
: マリメッコ・チャートjQuery . jqplot . OHLCRenderer
: いかり足、ローソク足jQuery . jqplot . PieRenderer
: 円グラフjQuery . jqplot . PyramidRenderer
: ピラミッドグラフ
- series
各系列ごとに指定する系列に関するオプション。1つ目の系列から順に、配列で指定する。
- label
- legend
凡例に関するオプション。
- show
凡例を表示するか。「true」は表示。「false」は非表示。初期設定値は、「false」。
- placement
凡例を配置する位置。
- location
凡例を配置する位置(方角)。
- renderer
凡例の生成編集に使うプラグインを指定。
jQuery . jqplot . EnhancedLegendRenderer
: 凡例の機能を強化する。
- rendererOptions
凡例の生成編集に関するオプション。
- numberColumns
凡例の列数。
- axes
軸に関するオプション。
- xaxis
X軸に関するオプション。
- renderer
jQuery . jqplot . CategoryAxisRenderer
: X軸をカテゴリとして扱う。
resizableに関するオプション
- minHeight
最小の高さを指定するオプション。初期設定値は「10」。
- minWidth
最小の幅を指定するオプション。初期設定値は「10」。
- maxHeight
最大の高さを指定するオプション。初期設定値はない。
- maxWidth
最大の幅を指定するオプション。初期設定値はない。
HTML
<div id="resizable" class="ui-widget-content" style="padding: 5px; width: 350px;">
<div id="jqPlot-sample" style="height: 250px;"></div>
</div>
<div id="jqPlot-sample" style="height: 250px;"></div>
</div>