QbChartクラス内の各種インターフェイス、メソッドについて【EspressChart:API使用方法】


EspressChartのQbChartクラスはメインとなるチャートを生成するためのクラスであり、生成したチャートに対して各種変更を行うためのインターフェイスやメソッドが数多く含まれています。

今回はこのインターフェイスやメソッドに関してある程度カテゴリに分けて紹介していきます。

※使用例のchartQbChart chart = new QbChart(...);のように作成済みである前提です。

チャート全体の描画に関連するAPI

ICanvas
キャンバスサイズや背景などのプロパティ
Java
ICanvas canvas=chart.gethCanvas();
canvas.setSize(new Dimension(800,600));
setAdjustFont
キャンバスサイズに応じてフォントを調整するかどうかを指定
Java
chart.setAdjustFont(true);
set3DShadingEnabled
3Dシェーディングを有効化
Java
chart.set3DShadingEnabled(true);
setGrayscaleForExport
グレースケールで画像をエクスポート
Java
chart.setGrayscaleForExport(true);
applyAntiAliasToChartAreaOnly
アンチエイリアスをチャートにのみ適用
Java
chart.applyAntiAliasToChartAreaOnly(true);
forceApplyAntiAliasToHorizontalText
水平に配置されている文字列には、アンチエイリアスが無効な場合でも強制的に有効化
Java
chart.forceApplyAntiAliasToHorizontalText(true);
setRenderingHint
アンチエイリアスなど描画クオリティやスピードに影響する描画アルゴリズムのパラメータを指定
Java
	chart.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, 
                         java.awt.RenderingHints.VALUE_ANTIALIAS_OFF);
IStringCustomizer
ユーザにより実装されたIStringCustomizerクラスを用いて非ASCII文字を表示
Java
 chart.setStringCustomizer(new StrCustomizer());
Java
 import quadbase.ChartAPI.*;
 import quadbase.util.*;
 
 public class StrCustomizer implements IStringCustomizer {
        public void StrCustomizer() {
        }
        public String encodeString(String str) {
                try {
                        byte[] bytes = str.getBytes("8859_1");
                        return new String(bytes, "SJIS");
                } catch (java.io.UnsupportedEncodingException e) {
                        e.printStackTrace();
                }
                return null;
        }
 }
setAddOnChart
チャート内に別のチャートを追加
Java
QbChart chart = new QbChart(...);
QbChart chartadd1 = new QbChart(...);
QbChart chartadd2 = new QbChart(...);
chart.setAddOnChart(new QbChart[] { chartadd1, chartadd2 });
IChartGraphics
キャンバスにチャートを追加する前と後にグラフィックを追加
Java
chart.setChartGraphics(new chartGenerationGraphics());
Java
import java.awt.Color;
import java.awt.Graphics;

import quadbase.util.IChartGraphics;

public class chartGenerationGraphics implements IChartGraphics {
    public void initializeGraphics(Graphics g, int w, int h) {
            g.setColor(Color.red);
            g.fillOval(50, 50, 400, 400);
    }
    public void finalizeGraphics(Graphics g, int w, int h) {
            g.setColor(Color.white);
            g.fillOval(125, 225, 50, 50);
            g.setColor(Color.orange);
            g.drawString("HELLO WORLD", 150, 250);
    }
}

チャートの軸やタイトルなど付属する部分に関するAPI

IPlot
チャートプロットエリアの背景や枠線、相対サイズなどのプロパティを設定/取得
Java
IPlot plot=chart.gethChartPlot();
plot.setRelativeHeight(.6f);
gethMainTitle
チャートタイトルの指定、変更
Java
ITextString mtitle = chart.gethMainTitle();
mtitle.setValue("タイトル");
IAxis
軸の描画や目盛り間隔などの設定
Java
IAxis yaxis=chart.gethYAxis(); 
yaxis.setScaleStep(10);
ILabel
チャートに描画されるラベルに関連付けられたさまざまなプロパティを設定/取得
Java
IAxis xaxis=chart.gethXAxis();
ILabel xlabel = xaxis.gethLabel();
xlabel.setColor(Color.GREEN);
IFormat
軸ラベルで使用されるDateTimeFormat、LocaleDateTimeFormat、LocaleNumericFormat、LogicalFormat、NumericFormatといった各種フォーマットを指定するための定数をタグ付け
Java
DateTimeFormat dtf = new DateTimeFormat();
dtf.hideTimestampTime = true;
dtf.hidedate = true;
dtf.hideyear = true;

IAxis xaxis=chart.gethXAxis();
ILabel xlabel = xaxis.gethLabel();
xaxis.setLabelFormat(dtf);
IZoomInfo
時系列ズームに関連する様々なプロパティを設定/取得、反映するためのrefresh()でデータを更新する必要があります。
Java
IZoomInfo zoom = chart.gethZoomInfo();
zoom.setAggregateOperator(zoom.AVG);
zoom.setScale(2, zoom.MONTH);
zoom.setZoomEnabled(true);
chart.refresh();
ISecondaryChart
第2値(Second value)を指定し、追加で描画したチャートに関するプロパティを設定/取得
Java
ISecondaryChart secondchart = chart.gethSecondaryChart();
secondchart.setPointsVisible(false);
INoDataToPlotMessage
ソースデータが存在しない場合に、チャートに描画される「no data to plot」というメッセージの変更や表示、非表示を設定
Java
INoDataToPlotMessage ndtpm = chart.gethNoDataToPlotMessage();
ndtpm.setMessage("データが見つかりません");

チャートプロット自体に関連するAPI

IDataPointSet
データプロットに関する全般的な描画プロパティ
Java
IDataPointSet points = chart.gethDataPoints();
points.setPointsVisible(true);
points.setPointsShapes(new int[] {QbChart.CIRCLE,QbChart.CROSS});
IBoxPropertySet
2Dボックスチャート専用のプロパティ
Java
IBoxPropertySet box = chart.gethBoxProperties();
box.setLayout(QbChart.VERTICAL);
IBubblePropertySet
2Dバブルチャート専用のプロパティ
Java
IBubblePropertySet bubble = chart.gethBubbleProperties();
bubble.setAxisUnitToRadiusRatio(0.2);
IDialPropertySet
ダイヤルチャート専用のプロパティ
Java
IDialPropertySet dial = chart.gethDialProperties();
dial.setNeedleStyle(dial.TRIANGULAR_POINTER);
IDoughnutPropertySet
ドーナツチャート専用のプロパティ
Java
IDoughnutPropertySet doughnut = chart.gethDoughnutProperties();
doughnut.setArcLengthRatio(25);
IGanttPropertySet
ガントチャート専用のプロパティ
Java
IGanttPropertySet gantt = chart.gethGanttProperties();
gantt.setArrowsDrawn(true);
ILinePropertySet
2D折れ線チャート専用のプロパティ
Java
ILinePropertySet line = chart.gethLineProperties();
line.setStepLineDrawn(true,0.5);
IDropBarSet
複数系列を持つ折れ線チャートに各カテゴリ(X軸値)における間隔を強調するドロップバーを描画
Java
IDropBarSet dropBar = chart.gethDropBars();
dropBar.setVisible(true);
dropBar.setUpBarColor(Color.green);
dropBar.setDownBarColor(Color.red);
IOverlayPropertySet
オーバーレイチャート専用のプロパティ
Java
IOverlayPropertySet overlay = chart.gethOverlayProperties();
overlay.setLayerType(0, QbChart.COL);
overlay.setLayerType(1, QbChart.LINE);
IPiePropertySet
円グラフ専用のプロパティ
Java
IPiePropertySet pie = chart.gethPieProperties();
pie.setExploded(3, true);
pie.setExplodeRadialPos(0.2f);
IPolarPropertySet
ポーラーチャート専用のプロパティ
Java
IPolarPropertySet polar = chart.gethPolarProperties();
polar.setStartAngle(30);
IRadarPropertySet
レーダーチャート専用のプロパティ
Java
IRadarPropertySet radar = chart.gethRadarProperties();
radar.setAreaCutOffPoint(500.0);
ISurfacePropertySet
3D曲面チャート専用のプロパティ
Java
ISurfacePropertySet surface = chart.gethSurfaceProperties();
surface.setSurfaceColor(Color.green);
setHeatmapColors
ヒートマップの色を指定
Java
chart.setHeatmapColors(new Color[] {Color.red,Color.green,Color.blue});
setHiLowAsCandleStick
ローソク足チャートの形式で HLCO チャートを表示するために使用
Java
chart.setHiLowAsCandleStick(true);
IHistogramInfo
ヒストグラムの有効化やそれに関連する様々なプロパティを設定/取得。
縦/横カラムチャート、折れ線チャート、エリアチャートの特定の構成で利用可能です。
また、変更を反映するために、refresh()が必要となります。
Java
		IHistogramInfo hisfo = chart.gethHistogramInfo();
		hisfo.setLowerBound(20);
		hisfo.setUpperBound(80);
		hisfo.setRounded(true);
		hisfo.setScale(10);		
		hisfo.setHistogram(true);
    chart.refresh();

チャートへ文字列を追加するAPI

IAnnotationIAnnotationSet
注釈(任意文字ラベル)文字列をIAnnotationで作成、設定し、IAnnotationSetで特定オブジェクトへの注釈として追加、削除
Java
	    IAnnotationSet annoset = chart.gethAnnotations();
	    String[] texts = 
	    { "カスタムの", "凡例作成例です。", "カスタム1", "カスタム2" };
	    int[] shapes = 
	    { QbChart.PLUS, QbChart.NOSYMBOL, QbChart.SQUARE, QbChart.DASH };
	    Color[] colors = 
	    { Color.red, Color.black, Color.blue, Color.green };
	    
	    IAnnotation anno = annoset.newAnnotation(texts, shapes, colors);
	    anno.setFont(new Font("BIZ UDPゴシック", Font.BOLD,9));
	    Point_2D newPosition = new Point_2D(.65f, .7f);
	    anno.setRelativePosition(newPosition);
	    annoset.addAnnotation(anno);
ITextString(TextString)、IFloatingTextSet
文字列をITextStringで作成、設定し、IFloatingTextSetで任意位置への文字列の追加、削除
Java
		IFloatingTextSet textset = chart.gethFloatingText();
		TextString text = new TextString(
				"test",
				new Font("Arial", Font.PLAIN, 12),
				Color.RED, 
				0, 
				0f, 
				0f );

		textset.add(text);

チャートへ線、図形を追加するAPI

IDataLineSet、IHorzVertLine、ITrendLine、IControlLine、IFunctionLine、IFunction、IDataLineIReferenceObj
チャートプロット上の値を基にして、線や図形を追加できます。
  • IDataLineSet:IHorzVertLine、ITrendLine、IControlLine、IFunctionLine、IFunctionで作成された線の追加、削除
  • IHorzVertLine:特定の値の水平線、垂直線を作成
  • ITrendLine:傾向分析(トレンド)用の線を作成
  • IControlLine:平均や最大、最小値、標準偏差などデータプロットを基にした定数線を作成
  • IFunctionLine:散布図(Scatter)に独自関数による線を作成(テンプレートファイルへは保存されません。)
  • IDataLine:IHorzVertLine、ITrendLine、IControlLine、IFunctionLineで作成された線で共通の描画(色や点線など)プロパティ
  • IReferenceObj:IHorzVertLine、ITrendLine、IControlLine、IFunctionLineへIAnnotation(注釈)オブジェクトを追加
Java
	    IDataLineSet lineset = chart.gethDataLines();
	    IHorzVertLine hline = lineset.newHorzVertLine
	    		(IHorzVertLine.HORIZONTAL_LINE, "水平線");
	    hline.setLineValue(1.0);
	    hline.setColorBelowLine(Color.red);
	    hline.setLineFromValue(0.8);
	    hline.setLineToValue(2.4);
	    lineset.add(hline);
	    
	    ITrendLine tline = lineset.newTrendLine
	    		(ITrendLine.EXPONENTIAL, 1, "指数近似");
	    tline.setSeries("系列名");
	    tline.setLineStyle(IDataLine.DOTTED_STYLE);
	    lineset.add(tline);
	    
	    IControlLine cline = lineset.newControlLine
	    		(IControlLine.CONTROL_AVERAGE, "平均");
	    cline.setSeries("系列名");
	    cline.setColor(Color.blue);	
	    lineset.add(cline);
	    
	    IFunctionLine fline = lineset.newFunctionLine
	    		(new CustomFunc(), "独自関数");
	    IAnnotationSet annoset = chart.gethAnnotations(); 
	    IAnnotation anno = annoset.newAnnotation("Y=SIN(0.5×X)"); 
	    anno.setRelativePosition(new Point_2D(0.09f,0.1f)); 
	    fline.addAnnotation(anno);	    
	    lineset.add(fline);
Java
import quadbase.util.*;

public class CustomFunc implements IFunction {
       public void FunctionCustomizer() {
       }
       public double getY(double x) {
    	   return Math.sin(0.5*x);
       }
}
IControlRangeSet、ControlRange
プロット上の特定範囲、範囲内の描画(色など)をControlRangeで作成し、IControlRangeSetで追加、削除
Java
		ControlRange crA = new ControlRange(0.0,3.0,Color.green,"RangeA",false);
		crA.setDepth(0);
		
		ControlRange crB = new ControlRange(2.5,2.8,Color.gray,"RangeB",false);
		crB.setScale2Enabled(true);
		crB.setStartScale2(3);
		crB.setEndScale2(4);
		crB.setDepth(1);

		IControlRangeSet crset = chart.gethControlRanges();
		crset.addElement(crA);
		crset.addElement(crB);
IFloatingLineSet、PolyLine
特定座標間をつなぐ、線をPolyLineで作成し、IFloatingLineSetで追加、削除
Java
		IFloatingLineSet flineset = chart.gethFloatingLines();
		Vector<Point_2D> vector = new Vector<Point_2D>();
		vector.add(new Point_2D(0.55f,0.55f));
		vector.add(new Point_2D(0.5f,0.5f));
		PolyLine pl = new PolyLine();
		pl.setThickness(3);
		pl.set(vector.elements(), Color.red);
		pl.setArrowAtEndPointVisible(true);
		flineset.add(pl);

キャンバス上へデータ表追加するAPI

ITable
チャート上で使用されている値の表を追加、設定するプロパティ
Java
		ITable table = chart.gethTable();
		table.setPosition(new Position(0.05f,0.2f));
		table.setHeaderFont(new Font("BIZ UDPゴシック", Font.BOLD,7));
		table.setCellFont(new Font("BIZ UDPゴシック", Font.PLAIN, 7));
		table.setCellBackgroundColor(Color.white);
		table.setHeaderBackgroundColor(Color.DARK_GRAY);
		table.setHeaderTextColor(Color.white);
		table.setVisible(true);

その他、共通する部分を設定するAPI

IText
IAnnotation、ILabel、INoDataToPlotMessage、ITextStringのサブインターフェイスとして含まれる文字列のフォントや色、角度などを指定
Java
    IAxis xaxis = chart.gethXAxis();
		xaxis.gethLabel().setAngle(45);
IGradientPropertySetIGradientSupport
IAnnotation、ICanvas、ILegend、IPlot、ISecondaryChartのサブインターフェイスとしてグラデーションに関する設定情報を設定、取得
Java
		ICanvas canvas = chart.gethCanvas();
		canvas.setGradientEnabled(true);
		canvas.setGradientDesColor(Color.blue);

チャートのソースデータを参照、変更するAPI

IInputDataIResultSetIRSMetaDataIRowIColumnMap
生成ずみのチャートのソースデータの変更や、データ自体の参照、変更
Java
		IInputData input = chart.gethInputData();
		
		// IResultSet内の値を出力
		IResultSet rs = input.getData();		
		IRSMetaData md = rs.getMetaData();
		int nCol = md.getColumnCount();
		int nRow = 0; 
		
		for(int i=1; i<=nCol; i++) {
			System.out.print("\t"+ md.getColumnName(i) 
						     +"["+ md.getColumnType(i) +"]");
		}
		System.out.println("");
		while(rs.next()) {
			++nRow;
		    for(int i=1; i<=nCol; i++) {
		    	System.out.print("\t" + rs.getObject(i));
		    }
		    System.out.println("");
		}
		
		// 新たに定義したIResultSetを適用
		String newrecords[][] = { 
				{ "ABC","2021-05-01","1"}, 
				{ "ABC","2021-06-01","2"}, 
				{ "ABC","2021-07-01","3" },
		};			
		String newdataType[] = {"varchar", "date", "int"}; 
		String newfieldName[] = {"Series", "月", "Y軸"}; 
		IResultSet newdata = new DbData(newdataType, newfieldName, newrecords);
		
		input.setData(newdata);

これらは、あくまでもチャートに読み込む値のみが変更します。ソースデータファイルやデータベース上の値が変更されるわけではありません。

Java上での型との対応に関して
https://data.quadbase.com/Docs71/ec/help/manual/DataFromTextFiles.html#DataTypesAndFormatForTextFiles

変更前のソースデータ
String, Date, Numeric
"Series", "月", "Y軸"
"ABC","2020-05-01","1"
"ABC","2020-06-01","2"
"ABC","2020-07-01","3"
Java
		IInputData input = chart.gethInputData();
		String dateString = "2020-07-01";
		java.sql.Date sqlDate = java.sql.Date.valueOf(dateString);
		IRow r=new CRow(
		"ABC",
		sqlDate, 
		4);	
		
		// 最後の行として追加    
		input.addRow(r);	
		
		// 最初の行を取得
		IRow fr = input.getRow(0);
		
		// 最後の行番号を取得
		int lastid = input.getRowCount()-1;
		
		// 最後の行から一つ前の行を、最初の行の値に更新
		input.updateRow(lastid-1, fr);	
		
		// 一致する行番号を取得(複数ある場合は、最も後方にある行番号のみ
		String mdateString = "2020-05-01";
		java.sql.Date msqlDate = java.sql.Date.valueOf(mdateString);
		IRow mr=new CRow(
		"ABC",
		msqlDate, 
		1);	
		
		int mrid = input.matchRecord(mr);
		
		// 一致した行を削除
		input.deleteRow(mrid);
Java
import quadbase.util.IRow;
public class CRow implements IRow{
	Object[] row;

	public CRow (
	String obj1, 
	java.sql.Date obj2,
	int obj3){
		row = new Object[]{obj1, obj2, obj3};
	}

	public Object getObject(int i){
		return row[i-1];
	}
}
変更後のソースデータ
String, Date, Numeric
"Series", "月", "Y軸"
"ABC","2020-05-01","1"
"ABC","2020-06-01","2"
"ABC","2020-07-01","4"
Java
		IColumnMap colmap = input.getColumnMap();
		ColInfo newcol = new ColInfo();
		newcol.category=colmap.getColumn(IMapConstants.SERIES);
		newcol.series=colmap.getColumn(IMapConstants.CATEGORY);
		newcol.value=colmap.getColumn(IMapConstants.VALUE);
		
		input.setColumnMap(newcol);

その他にもIInputDataには以下のようにソースデータ自体の参照を変更するようなメソッドが用意されています。

  • getClassFile、setClassFile
    ソースデータとなるクラスファイルの情報を取得/設定
  • getDatabaseInfo、setDatabaseInfogetQueryFilenamesetQueryFilenamereadQueryFile
    ソースデータとなるデータベースの情報やクエリファイルを取得/設定
  • getDataFile、setDataFile
    ソースデータとなるデータファイルの情報を取得/設定
  • getSalesForceQueryInfosetSalesForceQueryInfo
    ソースデータとなるSalesforceクエリ情報を取得/設定
  • getExcelFileInfosetExcelFileInfogetSpreadSheetModelsetSpreadSheetModelgetTransposedColumnsetSpreadSheetFormat
    ソースデータとなるエクセルファイルの情報を取得/設定、スプレッドシート上の転置を指定
  • getXMLFilesetXMLFilegetXMLFileQueryInfosetXMLFileQueryInfogetDTDFile
    ソースデータとなるXMLファイルの情報とクエリ情報を取得/設定

関連するトピックス:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.