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