001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.io; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.fukurou.util.StringUtil; 021 022import java.util.List; 023import java.util.Locale; 024 025import java.awt.Color; 026import java.text.SimpleDateFormat; 027 028import org.jfree.ui.RectangleEdge; 029import org.jfree.chart.JFreeChart; 030import org.jfree.chart.plot.Plot; 031import org.jfree.chart.plot.PlotOrientation; 032import org.jfree.chart.plot.CategoryPlot; 033import org.jfree.chart.renderer.category.CategoryItemRenderer; 034import org.jfree.data.category.CategoryDataset; 035import org.jfree.chart.axis.CategoryAxis; 036import org.jfree.chart.axis.CategoryLabelPositions; 037import org.jfree.chart.axis.CategoryAnchor; 038import org.jfree.chart.axis.DateAxis; // 5.6.1.0 (2013/02/01) 039import org.jfree.chart.plot.DatasetRenderingOrder; 040import org.jfree.chart.plot.CategoryMarker; 041 042/** 043 * ChartCreate は、JFreeChart オブジェクトを構築するクラスです。 044 * 複数の ChartDataset オブジェクトを合成することも、ここで行っています。 045 * グラフの種類は、ChartPlot_XXX クラスで設定しています。 046 * ここでは、簡易的にオブジェクトを構築できるように、チャートタイプの指定によって、 047 * 各種作成するオブジェクトを切り替えています。 048 * 049 * @version 0.9.0 2007/06/21 050 * @author Kazuhiko Hasegawa 051 * @since JDK1.1, 052 */ 053public class ChartCreate { 054 055 private String title = null; // タイトル 056 private String chartType = null; // チャートの種類 057 private String domainLabel = null; // チャートの共通横軸のラベル 058 private boolean showLegend = true; // 凡例 の表示可否 059 private RectangleEdge rectEdge= RectangleEdge.BOTTOM; // 凡例の表示箇所 060 private PlotOrientation plotOri = PlotOrientation.VERTICAL; // チャートの軸表示方向 061 private Color chartBackColor = null; // 背景色の設定 062 private Color plotBackColor = null; // 描画領域の設定 063 private int rotationLabel = 0; // 横軸ラベルの傾き(1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ ) 064 // CategoryAxis系は、rotationLabel。ValueAxis系(NumberAxis,DateAxis)は、useVerticalLabels で、ラベルの表示向きを指定します。 065 private boolean useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書き:false/縦書き:true) 066 private String domainMarker = null; // 横軸のマーカーライン 067 private boolean useDomainLabel = true; // 横軸ラベルの表示有無 068 private boolean useMarkerLabel = true; // マーカーライン時の文字有無 069 private int seriesPikup = -1; // ピックアップするシリーズ番号 070 private HybsURLGenerator urlGen = null; // クリッカブル・マップ 071 // 4.0.2.0 (2007/12/20) 072 private String categoryMargin = null; // カテゴリマージン(0.0~1.0) 073 private String lowerMargin = null; // 下方マージン(0.0~1.0) 074 private String upperMargin = null; // 上方マージン(0.0~1.0) 075 private boolean isDebug = false; // デバッグフラグ 076 private boolean useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 077 private Color domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 078 private boolean useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 079 private Color rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 080 private int categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 081 private int categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク 082 private int rangeSkip = 1; // 4.1.1.0 (2008/02/04) 縦軸のグリッドをスキップする間隔 083 private boolean useToolTip = false; // 4.3.1.0 (2008/08/09) ツールチップスの利用 084 085 private CategoryAnchor categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 086 087 private List<ChartDataset> chartDataset = null; // チャートのデータ属性管理オブジェクトのリスト 088 089 private String dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット 090 091 092 /** 093 * JFreeChart オブジェクトを作成します。 094 * 095 * 内部的には、ChartPlot インターフェースに基づいた Plot を構築するクラスを 096 * 呼び出して、JFreeChart の引数に設定します。 097 * 各種属性の設定も行います。 098 * 099 * @return JFreeChartオブジェクト 100 */ 101 public JFreeChart getChart() { 102 103 ChartPlot chPlot = ChartFactory.newChartPlot( chartType ); 104 105 Plot plot = chPlot.getPlot( this ); 106 107 // 描画領域の設定 108 if( plotBackColor != null ) { 109 plot.setBackgroundPaint( plotBackColor ); 110 } 111 112 JFreeChart chart = new JFreeChart( title, JFreeChart.DEFAULT_TITLE_FONT, plot, showLegend ); 113 114 if( showLegend ) { 115 chart.getLegend().setPosition( rectEdge ); 116 } 117 118 // 背景色の設定 119 if( chartBackColor != null ) { 120 chart.setBackgroundPaint( chartBackColor ); 121 } 122 123 // 以降の処理では、変更イベントが発行される。 124 if( categoryAnchor != null && plot instanceof CategoryPlot ) { 125 ((CategoryPlot)plot).setDomainGridlinePosition( categoryAnchor ) ; 126 } 127 128 return chart; 129 } 130 131 /** 132 * JFreeChart オブジェクトを変更します。 133 * 134 * すでに作成済みの JFreeChart に対して、 135 * シリーズのピックアップ(seriesPikup) のみ、変更します。 136 * 使用するのは、引数の JFreeChart と seriesPikup 属性値のみです。 137 * 138 * @og.rev 3.8.9.2 (2007/07/28) シリーズ指定時の色、シェープ対応 139 * 140 * @param chart JFreeChartオブジェクト 141 * @param serNo seriesPikup 属性値 142 * 143 * @return JFreeChartオブジェクト 144 */ 145 public static JFreeChart modifying( final JFreeChart chart,final int serNo ) { 146 147 CategoryPlot plot = chart.getCategoryPlot(); 148 149 if( plot instanceof HybsCategoryPlot ) { 150 // 以降の処理では、変更イベントは発行されない。 151 // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除 152 ((HybsCategoryPlot)plot).setSeriesPikup( serNo ) ; 153 } 154 155 CategoryDataset dtset = plot.getDataset(); 156 int rowCnt = dtset.getRowCount(); // Series の個数 157 158 CategoryItemRenderer rend = plot.getRenderer(); 159 160 if( serNo >= 0 && serNo < rowCnt ) { 161 rend.setBasePaint( Color.CYAN ); 162 rend.setSeriesPaint( serNo, Color.RED ); 163 } 164 165 return chart ; 166 } 167 168 /** 169 * CategoryPlotオブジェクトを返します。 170 * 171 * ChartCreate オブジェクト(自分自身)に設定された各種属性を元に、 172 * CategoryPlotオブジェクトを構築します。 173 * 必要な属性設定は、済んでいる状態です。 174 * ここでは、serNo、categoryAxis、plotOrientation、useDomainLine、 175 * domainLineColor、useRangeLine 、RangeLineColor 、rangeSkip 、 176 * domainMarker を設定しておきます。 177 * 178 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 179 * 180 * @return 必要な属性を設定済みのCategoryPlotオブジェクト 181 */ 182 protected HybsCategoryPlot makeCategoryPlot() { 183 HybsCategoryPlot cPlot = new HybsCategoryPlot( seriesPikup ); 184 185 cPlot.setOrientation( plotOri ); 186 cPlot.setDatasetRenderingOrder( DatasetRenderingOrder.FORWARD ); 187 188 // ドメイン(横軸)に対する、グリッドライン(垂直線)の指定 189 cPlot.setDomainGridlinesVisible( useDomainLine ); 190 if( domainLineColor != null ) { cPlot.setDomainGridlinePaint( domainLineColor ); } 191 192 // レンジ(縦軸)に対する、グリッドライン(水平線)の指定 193 cPlot.setRangeGridlinesVisible( useRangeLine ); 194 if( rangeLineColor != null ) { cPlot.setRangeGridlinePaint( rangeLineColor ); } 195 196 // 4.1.1.0 (2008/02/04) 縦軸のグリッド線(水平線)をスキップする間隔の指定 197 cPlot.setRangeSkip( rangeSkip ); 198 199 // 横軸ドメインマーカーの設定(縦ライン) 200 if( domainMarker != null ) { 201 CategoryMarker catMk = new CategoryMarker( domainMarker ); 202 catMk.setDrawAsLine( true ); 203 if( useMarkerLabel ) { 204 catMk.setLabel( domainMarker ); 205 } 206 cPlot.addDomainMarker( catMk ); 207 } 208 209 return cPlot ; 210 } 211 212 /** 213 * CategoryAxisオブジェクトを返します。 214 * 215 * ChartCreate オブジェクト(自分自身)に設定された各種属性を元に、 216 * CategoryAxisオブジェクトを構築します。 217 * 必要な属性設定は、済んでいる状態です。 218 * ここでは、domainLabel、categoryMargin、lowerMargin、upperMargin、 219 * useDomainLabel、rotationLabel を設定しておきます。 220 * 221 * @og.rev 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク追加(categoryCutNo) 222 * 223 * @return 必要な属性を設定済みの CategoryAxisオブジェクト 224 */ 225 protected CategoryAxis makeCategoryAxis() { 226 CategoryAxis categoryAxis = new HybsCategoryAxis( 227 domainLabel,categorySkip,categoryCutNo 228 ); 229 230 // カテゴリマージン(0.0~1.0)を指定します。 231 if( categoryMargin != null ) { 232 double ctMargin = Double.parseDouble( categoryMargin ); 233 categoryAxis.setCategoryMargin( ctMargin ) ; // double margin 234 } 235 236 // 下方マージン(0.0~1.0)を指定します。 237 if( lowerMargin != null ) { 238 double lwMargin = Double.parseDouble( lowerMargin ); 239 categoryAxis.setLowerMargin( lwMargin ) ; // double margin 240 } 241 242 // 上方マージン(0.0~1.0)を指定します。 243 if( upperMargin != null ) { 244 double upMargin = Double.parseDouble( upperMargin ); 245 categoryAxis.setUpperMargin( upMargin ) ; // double margin 246 } 247 248 // チャートのカテゴリーラベルの方向を指定します。 249 if( rotationLabel > 0 ) { 250 categoryAxis.setCategoryLabelPositions( 251 CategoryLabelPositions.createUpRotationLabelPositions( 252 Math.PI / rotationLabel )); 253 } 254 else if( rotationLabel < 0 ) { 255 categoryAxis.setCategoryLabelPositions( 256 CategoryLabelPositions.createDownRotationLabelPositions( 257 Math.PI / -rotationLabel )); 258 } 259 260 // 横軸ラベルの表示有無を返します。 261 categoryAxis.setVisible( useDomainLabel ); // ドメインラベルの表示有無 262 263 if( isDebug ) { 264 System.out.println( "CategoryMargin="+categoryAxis.getCategoryMargin()); 265 System.out.println( "LowerMargin="+categoryAxis.getLowerMargin()); 266 System.out.println( "UpperMargin="+categoryAxis.getUpperMargin()); 267 } 268 269 return categoryAxis ; 270 } 271 272 /** 273 * チャートのデータ属性管理オブジェクトのリストを設定します。 274 * 275 * ChartDataset オブジェクトは、内部チャートの個々の属性を管理しています。 276 * このオブジェクト は、グラフの合成に使用できるように、内部にそれぞれの Plot や 277 * renderer に対応する情報を持っています。 278 * これらを、複数管理するときに、List 管理していますので、そのList をセットします。 279 * JFreeChart には、この複数のChartDataset から、それぞれの Plot と Dataset を 280 * 順次、追加していく必要があります。その処理は、ChartPlot インターフェースを 281 * 継承した、サブクラスで実際に行われます。 282 * 283 * @param datasetList チャートのデータ属性管理のリスト 284 */ 285 public void setDatasetList( final List<ChartDataset> datasetList ) { 286 chartDataset = datasetList; 287 288 if( chartDataset != null ) { 289 ChartDataset firstChData = chartDataset.get(0); 290 chartType = firstChData.getChartType(); 291 } 292 } 293 294 /** 295 * チャートのデータ属性管理オブジェクトのリストを返します。 296 * 297 * @return チャートのデータ属性管理オブジェクトのリスト 298 * @see #setDatasetList( List ) 299 */ 300 protected List<ChartDataset> getDatasetList() { return chartDataset; } 301 302 /** 303 * チャートのタイトルを設定します。 304 * 305 * @param chTitle チャートのタイトル 306 */ 307 public void setTitle( final String chTitle ) { 308 title = chTitle; 309 } 310 311 /** 312 * チャートの共通横軸のラベルを設定します。 313 * 314 * @param domLabel チャートの共通横軸のラベル 315 */ 316 public void setDomainLabel( final String domLabel ) { 317 domainLabel = domLabel; 318 } 319 320 /** 321 * チャートの共通横軸のラベルを返します。 322 * 323 * @return チャートの共通横軸のラベル 324 */ 325 protected String getDomainLabel() { return domainLabel; } 326 327 /** 328 * 凡例 の表示可否を設定します。 329 * 330 * @param showLeg 凡例 の表示可否 331 */ 332 public void setShowLegend( final boolean showLeg ) { 333 showLegend = showLeg; 334 } 335 336 /** 337 * 凡例の表示箇所を設定します(TOP、BOTTOM、RIGHT、LEFT)。 338 * 339 * 表示箇所は、org.jfree.ui.RectangleEdge クラスの設定値を使用します。 340 * 指定できるのは、TOP、BOTTOM、RIGHT、LEFT で、各文字の頭一文字で 341 * 判定してます。つまり、T,B,R,L で、判定を行い、それ以外はエラーになります。 342 * 343 * @param edge 凡例の表示箇所(TOP、BOTTOM、RIGHT、LEFT) 344 */ 345 public void setRectangleEdge( final String edge ) { 346 if( edge != null && edge.length() > 0 ) { 347 char ope = edge.charAt(0); 348 switch( ope ) { 349 case 'T' : rectEdge = RectangleEdge.TOP; break; 350 case 'B' : rectEdge = RectangleEdge.BOTTOM;break; 351 case 'R' : rectEdge = RectangleEdge.RIGHT; break; 352 case 'L' : rectEdge = RectangleEdge.LEFT; break; 353 default : 354 String errMsg = "指定のパラメータは適用できません。[" + edge + "]" 355 + HybsSystem.CR 356 + "TOP,BOTTOM,RIGHT,LEFT の中から、指定してください。" ; 357 throw new HybsSystemException( errMsg ); 358 } 359 } 360 } 361 362 /** 363 * チャートの軸表示方向を設定します(VERTICAL、HORIZONTAL)。 364 * 365 * 軸表示方向は、org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。 366 * 指定できるのは、VERTICAL、HORIZONTALで、各文字の頭一文字で 367 * 判定してます。つまり、V,H で、判定を行い、それ以外はエラーになります。 368 * 369 * @param orientation 凡例の表示箇所(VERTICAL、HORIZONTAL) 370 */ 371 public void setPlotOrientation( final String orientation ) { 372 if( orientation != null && orientation.length() > 0 ) { 373 char ope = orientation.charAt(0); 374 switch( ope ) { 375 case 'V' : plotOri = PlotOrientation.VERTICAL; break; 376 case 'H' : plotOri = PlotOrientation.HORIZONTAL;break; 377 default : 378 String errMsg = "指定のパラメータは適用できません。[" + orientation + "]" 379 + HybsSystem.CR 380 + "VERTICAL,HORIZONTAL の中から、指定してください。" ; 381 throw new HybsSystemException( errMsg ); 382 } 383 } 384 } 385 386 /** 387 * チャートの軸表示方向を返します。 388 * 389 * org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。 390 * 391 * @return チャートの軸表示方向(VERTICAL、HORIZONTAL) 392 */ 393 protected PlotOrientation getPlotOrientation() { return plotOri; } 394 395 /** 396 * チャートの背景色を指定します。 397 * 398 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 399 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 400 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 401 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 402 * 403 * @param chBackClr チャートの背景色 404 * @see java.awt.Color#BLACK 405 */ 406 public void setChartBackColor( final String chBackClr ) { 407 if( chBackClr != null && chBackClr.length() > 0 ) { 408 chartBackColor = StringUtil.getColorInstance( chBackClr ); 409 } 410 } 411 412 /** 413 * チャートの描画領域の色を指定します。 414 * 415 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 416 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 417 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 418 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 419 * 420 * @param plBackClr チャートの描画領域色 421 * @see java.awt.Color#BLACK 422 */ 423 public void setPlotBackColor( final String plBackClr ) { 424 if( plBackClr != null && plBackClr.length() > 0 ) { 425 plotBackColor = StringUtil.getColorInstance( plBackClr ); 426 } 427 } 428 429 /** 430 * チャートのカテゴリーラベルの方向を指定します。 431 * 432 * これは、CategoryAxis 系の横軸ラベルに対して、表示方向を指定します。 433 * ValueAxis系(NumberAxis,DateAxis)は、setUseVerticalLabels( boolean ) で 434 * true:縦/false:横 のみ指定可能です。 435 * 436 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 437 * この指示数に相当する値を設定します。 438 * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ 439 * マイナスは、下方向に回転させます。 440 * 0 を指定した場合は、何も設定しません。(初期設定のまま) 441 * 442 * @param rotLabel カテゴリーラベルの方向 443 * @see #setUseVerticalLabels( boolean ) 444 */ 445 public void setRotationLabel( final int rotLabel ) { 446 rotationLabel = rotLabel; 447 } 448 449 /** 450 * ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false)。 451 * 452 * これは、ValueAxis系(NumberAxis,DateAxis) 系の横軸ラベルに対して、表示方向を 453 * true:縦/false:横で、指定します。 454 * true に指定した場合で、かつ、rotationLabel が未指定(=0)の場合は、2:90度 も設定します。 455 * 456 * ChartCreate の rotationLabel は、角度を指定できましたが、NumberAxis,DateAxis では、 457 * 縦にするかどうかの指定しかできません。 458 * ここでは、true を指定するとラベルは、縦書きになります。 459 * 初期値は、false(横書き)です。 460 * 461 * @og.rev 5.6.4.3 (2013/05/24) 新規追加 462 * 463 * @param useVLavels ラベルの表示向き [false:横書き/true:縦書き] 464 * @see #setRotationLabel( int ) 465 */ 466 public void setUseVerticalLabels( final boolean useVLavels ) { 467 useVerticalLabels = useVLavels; 468 469 // useVerticalLabels=true で、rotationLabel を 2:90度 に設定しておきます。 470 if( useVerticalLabels && rotationLabel == 0 ) { rotationLabel = 2; } 471 } 472 473 /** 474 * チャートのカテゴリーラベルの方向を取得します。 475 * 476 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 477 * この指示数に相当する値を設定します。 478 * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ 479 * マイナスは、した方向に回転させます。 480 * 0 を指定した場合は、何も設定しません。(初期設定のまま) 481 * 482 * @return カテゴリーラベルの方向 483 * @see #setRotationLabel( int ) 484 */ 485 protected int getRotationLabel() { return rotationLabel; } 486 487 /** 488 * チャートの横軸の値(ドメイン)に合致する位置にマーカーラインを設定します。 489 * 490 * この属性には、マーカーラインを設定する値を記述します。 491 * 492 * @param marker ドメインのマーカーライン 493 */ 494 public void setDomainMarker( final String marker ) { 495 if( marker != null && marker.length() > 0 ) { 496 domainMarker = marker; 497 } 498 } 499 500 /** 501 * 横軸ラベルのラベルを表示するかどうか[true/false]を指定します(初期値:true)。 502 * 503 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えにくくなります。 504 * そのようなケースで、横軸のラベルそのものを表示しない場合に、false を 505 * 設定します。 506 * 初期値は、表示する(true)です。 507 * 508 * @param flag 横軸ラベルの表示有無 [true:表示する/false:表示しない] 509 */ 510 public void setUseDomainLabel( final boolean flag ) { 511 useDomainLabel = flag ; 512 } 513 514 /** 515 * 横軸ラベルの表示有無を返します。 516 * 517 * @return boolean横軸ラベルの表示有無(true:表示する/false:表示しない) 518 */ 519 protected boolean isUseDomainLabel() { return useDomainLabel; } 520 521 /** 522 * マーカーラインに、その設定値を表示するかどうか[true/false]を指定します(初期値:true)。 523 * 524 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えない場合があります。 525 * そのようなケースで、見たい値にマーカーラインを設定し、その横に、ドメインラベル 526 * を表示する事で、ピックアップしている軸の値を容易に知ることが可能です。 527 * 初期値は、表示する(true)です。 528 * 529 * @param flag マーカーラインの設定値表示 [true:表示する/false:表示しない] 530 */ 531 public void setUseMarkerLabel( final boolean flag ) { 532 useMarkerLabel = flag ; 533 } 534 535 /** 536 * 複数シリーズのピックアップを行う場合のシリーズ番号を指定します。 537 * 538 * 複数シリーズ(検索時に複数項目を同時に検索する場合)では、チャート上に 539 * 複数のグラフが表示されますが、その中の一つをピックアップする場合に、 540 * シリーズ番号を指定します。 541 * シリーズ番号は、0 から始まる数字です。 542 * ここでは、ピックアップされたシリーズは、赤色で表示されます。 543 * それ以外は、グレー色での表示になります。 544 * (※ 本来は、ChartDataset に持つべき属性です。) 545 * 546 * @param serPikup シリーズ番号 547 */ 548 public void setSeriesPikup( final int serPikup ) { 549 seriesPikup = serPikup; 550 } 551 552 /** 553 * 横軸ラベルをスキップする間隔を指定します。 554 * 555 * 横軸ラベル(カテゴリラベル表示)する際に、スキップする間隔を指定します。 556 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 557 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 558 * 初期値は、"1" (すべて表示)です。 559 * なお、先頭から表示を開始します。 560 * 561 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 562 * また、categoryCutNo が指定された場合は、categorySkip は使用されません。 563 * 564 * @param cateSkip ラベルをスキップする間隔を指定 565 * @see #setCategoryCutNo( int ) 566 */ 567 public void setCategorySkip( final int cateSkip ) { 568 categorySkip = cateSkip; 569 } 570 571 /** 572 * 横軸ラベルの文字位置指定のキーブレイクを指定します。 573 * 574 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 575 * 576 * 横軸ラベル(カテゴリラベル表示)する際に、ラベルの先頭から、この指定文字数だけ 577 * カットして、表示します。 578 * その際、前回作成したカットラベルと、同一ラベルの場合は、表示しません。 579 * 例えば、データは、年月日で、年と月のみ(先頭6文字)を指定すると、 580 * 日のデータは、ラベルが表示されません。 581 * 指定される数字は、1以上の整数としてください。 582 * 初期値は、すべて表示です。 583 * 584 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 585 * また、categoryCutNo が指定された場合は、categorySkip は使用されません。 586 * 587 * @param cateCutNo キーブレイク位置 588 * @see #setCategorySkip( int ) 589 */ 590 public void setCategoryCutNo( final int cateCutNo ) { 591 if( cateCutNo > 0 ) { 592 categoryCutNo = cateCutNo; 593 } 594 } 595 596 /** 597 * 複数シリーズのピックアップを行う場合のシリーズ番号を取得します。 598 * 599 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 600 * この指示数に相当する値を設定します。 601 * 0 を指定した場合は、何も設定しません。(初期設定のまま) 602 * (※ 本来は、ChartDataset に持つべき属性です。) 603 * 604 * @return シリーズ番号 605 * @see #setSeriesPikup( int ) 606 */ 607 protected int getSeriesPikup() { return seriesPikup; } 608 609 /** 610 * 縦軸のグリッド線(水平線)をスキップする間隔を指定します。 611 * 612 * 縦軸のグリッド線を表示する際に、スキップする間隔を指定します。 613 * 通常は、ラベルと同じだけのグリッド線が掛かれますが、ラベルよりも 614 * 少ない数のグリッド線(例えば、2つおき)を出す場合に、値を設定します。 615 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 616 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 617 * 初期値は、"1" (すべて表示)です。 618 * なお、先頭から表示を開始します。 619 * 620 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 621 * 622 * @param rngSkip 縦軸のグリッド線(水平線)をスキップする間隔 623 */ 624 public void setRangeSkip( final int rngSkip ) { 625 rangeSkip = rngSkip; 626 } 627 628 /** 629 * クリッカブル・マップ用URLを指定します。 630 * 631 * 画像に、クリッカブル・マップを作成する場合の、URL を指定します。 632 * これは、画像上にエリア指定でリンク引数を作成することが可能です。 633 * URL 自身は、? 付きで固定値の引数を連結することが可能です。 634 * クリックしたエリアのカテゴリやインデックスの値(引数)は、自動的に 635 * 設定されます。(指定しない場合はチャートによって異なります) 636 * <pre> 637 * ・Pie :category、pieIndex 638 * ・XY :series、item 639 * ・Category :series、category 640 * </pre> 641 * この引数の URL の名称を変更したい場合は、URL に続けて、カンマ(,) で、 642 * 名称を記述してください。 643 * 例:link.jsp,BLOCK 644 * 645 * @param imageMapUrl クリッカブル・マップ用URL 646 */ 647 public void setImageMapUrl( final String imageMapUrl ) { 648 if( imageMapUrl != null ) { 649 urlGen = new HybsURLGenerator( imageMapUrl ); 650 } 651 } 652 653 /** 654 * クリッカブル・マップ用URLを取得します。 655 * 656 * @return クリッカブル・マップ用URL 657 * @see #setImageMapUrl( String ) 658 */ 659 protected HybsURLGenerator getURLGenerator() { return urlGen; } 660 661 /** 662 * ツールチップス利用(true)利用しない(false)のフラグを取得します。 663 * 664 * @og.rev 4.3.1.0 (2008/08/09) 新規追加 665 * @og.rev 4.9.9.9 (2009/08/07) メソッド名変更 666 * 667 * @return ツールチップス利用(true)利用しない(false)のフラグ 668 * @see #setUseToolTip( boolean ) 669 */ 670 protected boolean isUseToolTip() { return useToolTip; } 671 672 /** 673 * カテゴリマージン(0.0~1.0)を指定します。 674 * 675 * カテゴリ(グラフの横軸に相当)の表示間隔(マージン)の比率を指定します。 676 * この比率は、% ではなく、数字(double)での設定になります。 677 * 何も指定しない場合は、デフォルトで自動調整されます。 678 * 679 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 680 * 681 * @param margin カテゴリマージン(0.0~1.0) 682 */ 683 public void setCategoryMargin( final String margin ) { 684 categoryMargin = margin; 685 } 686 687 /** 688 * 下方マージン(0.0~1.0)を指定します。 689 * 690 * カテゴリ(グラフの横軸に相当)の下方側(左側)のマージンの比率を指定します。 691 * この比率は、% ではなく、数字(double)での設定になります。 692 * 何も指定しない場合は、デフォルトで自動調整されます。 693 * 694 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 695 * 696 * @param margin 下方マージン(0.0~1.0) 697 */ 698 public void setLowerMargin( final String margin ) { 699 lowerMargin = margin; 700 } 701 702 /** 703 * 上方マージン(0.0~1.0)を指定します。 704 * 705 * カテゴリ(グラフの横軸に相当)の上方側(右側)のマージンの比率を指定します。 706 * この比率は、% ではなく、数字(double)での設定になります。 707 * 何も指定しない場合は、デフォルトで自動調整されます。 708 * 709 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 710 * 711 * @param margin 上方マージン(0.0~1.0) 712 */ 713 public void setUpperMargin( final String margin ) { 714 upperMargin = margin; 715 } 716 717 /** 718 * 横軸のグリッド表示有無(垂直線)を指定します(初期値:false)。 719 * 720 * ドメイン(横軸)に対する、グリッドラインを表示するかどうか指定します。 721 * 722 * 何も指定しない場合は、表示しません。(false) 723 * 724 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 725 * 726 * @param useLine 横軸のグリッド表示有無(垂直線) 727 */ 728 public void setUseDomainLine( final boolean useLine ) { 729 useDomainLine = useLine; 730 } 731 732 /** 733 * 横軸のグリッド線の色を指定します。 734 * 735 * ドメイン(横軸)に対する、グリッドラインの表示色を指定します。 736 * 何も指定しない場合は、デフォルトで自動設定されます。 737 * 738 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 739 * 740 * @param color 横軸のグリッド線の色 741 */ 742 public void setDomainLineColor( final String color ) { 743 if( color != null ) { 744 domainLineColor = StringUtil.getColorInstance( color ); 745 } 746 } 747 748 /** 749 * 縦軸のグリッド表示有無(水平線)を指定します(初期値:true)。 750 * 751 * レンジ(縦軸)に対する、グリッドラインを表示するかどうか指定します。 752 * 753 * 何も指定しない場合は、表示しません。(false) 754 * 755 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 756 * 757 * @param useLine 横軸のグリッド表示有無(垂直線) 758 */ 759 public void setUseRangeLine( final boolean useLine ) { 760 useRangeLine = useLine; 761 } 762 763 /** 764 * ツールチップスを利用(true)/利用しない(false)を指定します(初期値:false)。 765 * 766 * @og.rev 4.3.1.0 (2008/08/09) 新規追加 767 * 768 * @param toolTip ツールチップスを利用(true)/利用しない(false) 769 */ 770 public void setUseToolTip( final boolean toolTip ) { 771 useToolTip = toolTip; 772 } 773 774 /** 775 * 縦軸のグリッド線の色を指定します。 776 * 777 * レンジ(縦軸)に対する、グリッドラインの表示色を指定します。 778 * 何も指定しない場合は、デフォルトで自動設定されます。 779 * 780 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 781 * 782 * @param color 縦軸のグリッド線の色 783 */ 784 public void setRangeLineColor( final String color ) { 785 if( color != null ) { 786 rangeLineColor = StringUtil.getColorInstance( color ); 787 } 788 } 789 790 /** 791 * 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)を指定します。 792 * 793 * 横軸のグリッド(垂直線)を、グラフのどの位置に記述するかを指定します。 794 * 具体的な値は、CategoryAnchor オブジェクトの値になります。 795 * ここでは、文字列で(START,MIDDLE,END)を指定します。(先頭一文字で判定) 796 * 何も指定しない場合は、デフォルト(MIDDLE)です。 797 * 798 * @og.rev 4.1.1.0 (2008/02/14) 新規追加 799 * 800 * @param anchor 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 801 */ 802 public void setCategoryAnchor( final String anchor ) { 803 if( anchor != null && anchor.length() > 0 ) { 804 char anc = anchor.charAt(0); 805 switch( anc ) { 806 case 'S' : categoryAnchor = CategoryAnchor.START; break; 807 case 'M' : categoryAnchor = CategoryAnchor.MIDDLE; break; 808 case 'E' : categoryAnchor = CategoryAnchor.END; break; 809 default : 810 String errMsg = "指定のAnchorは適用できません。[" + anchor + "]" 811 + HybsSystem.CR 812 + "START,MIDDLE,END の中から、指定してください。" ; 813 throw new HybsSystemException( errMsg ); 814 } 815 } 816 } 817 818 /** 819 * Time,XYTime Polt関係の時間軸を表す場合のフォーマットを指定します。 820 * 821 * TimeSeries 関連のデータを扱う場合の横軸の日付フォーマットを指定します。 822 * 日付フォーマットは、java.text.SimpleDateFormat で使われる yyyy/MM/dd HH:mm:ss 表記です。 823 * 824 * 初期値は、"MM/dd" です。 825 * 826 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 827 * 828 * @param dtFormat Time,XYTime Polt関係の時間軸を表す場合のフォーマット 829 */ 830 public void setDateAxisFormat( final String dtFormat ) { 831 if( dtFormat != null && dtFormat.length() > 0 ) { 832 dateAxisFormat = dtFormat; 833 } 834 } 835 836 /** 837 * Time,XYTime Polt関係の時間軸を表す DateAxis オブジェクトを返します。 838 * 839 * このオブジェクトは、domainLabel で名前付けされた DateAxis で、日付フォーマットは、 840 * dateAxisFormat で DateFormat を Override しています。 841 * 初期フォーマットは、"MM/dd" です。 842 * 843 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 844 * @og.rev 5.6.4.3 (2013/05/24) 横軸ラベルを90度傾ける処理を追加 845 * 846 * @return DateAxisオブジェクト(Time,XYTime Polt関係の時間軸表現) 847 */ 848 protected DateAxis getDateAxis() { 849 DateAxis daxis = new DateAxis( domainLabel ); 850 daxis.setDateFormatOverride( new SimpleDateFormat( dateAxisFormat,Locale.JAPAN ) ); 851 852 // 5.6.4.3 (2013/05/24) 時間関係の横軸は、rotationLabel ではなく、useVerticalLabels を使います。 853 if( useVerticalLabels ) { 854 daxis.setVerticalTickLabels( useVerticalLabels ); 855 } 856 857 return daxis; 858 } 859 860 /** 861 * デバッグフラグを指定します。 862 * 863 * true に設定すると、チャートの状態を System.out.println します。 864 * 865 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 866 * 867 * @param flag デバッグフラグ [true:デバッグ/false:通常] 868 */ 869 public void setDebug( final boolean flag ) { 870 isDebug = flag; 871 } 872}