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