EspressChartのQbChartクラスはメインとなるチャートを生成するためのクラスであり、生成したチャートに対して各種変更を行うためのインターフェイスやメソッドが数多く含まれています。
今回はこのインターフェイスやメソッドに関してある程度カテゴリに分けて紹介していきます。
※使用例のchart
はQbChart chart = new QbChart(...);
のように作成済みである前提です。
Contents
チャート全体の描画に関連するAPI
ICanvas
キャンバスサイズや背景などのプロパティ
キャンバスサイズや背景などのプロパティ
Java
ICanvas canvas=chart.gethCanvas();
canvas.setSize(new Dimension(800,600));
setAdjustFont
キャンバスサイズに応じてフォントを調整するかどうかを指定
キャンバスサイズに応じてフォントを調整するかどうかを指定
Java
chart.setAdjustFont(true);
set3DShadingEnabled
3Dシェーディングを有効化
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文字を表示
ユーザにより実装された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といった各種フォーマットを指定するための定数をタグ付け
軸ラベルで使用される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()でデータを更新する必要があります。
時系列ズームに関連する様々なプロパティを設定/取得、反映するためのrefresh()でデータを更新する必要があります。
Java
IZoomInfo zoom = chart.gethZoomInfo();
zoom.setAggregateOperator(zoom.AVG);
zoom.setScale(2, zoom.MONTH);
zoom.setZoomEnabled(true);
chart.refresh();
ISecondaryChart
第2値(Second value)を指定し、追加で描画したチャートに関するプロパティを設定/取得
第2値(Second value)を指定し、追加で描画したチャートに関するプロパティを設定/取得
Java
ISecondaryChart secondchart = chart.gethSecondaryChart();
secondchart.setPointsVisible(false);
INoDataToPlotMessage
ソースデータが存在しない場合に、チャートに描画される「no data to plot」というメッセージの変更や表示、非表示を設定
ソースデータが存在しない場合に、チャートに描画される「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ボックスチャート専用のプロパティ
2Dボックスチャート専用のプロパティ
Java
IBoxPropertySet box = chart.gethBoxProperties();
box.setLayout(QbChart.VERTICAL);
IBubblePropertySet
2Dバブルチャート専用のプロパティ
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折れ線チャート専用のプロパティ
2D折れ線チャート専用のプロパティ
Java
ILinePropertySet line = chart.gethLineProperties();
line.setStepLineDrawn(true,0.5);
IDropBarSet
複数系列を持つ折れ線チャートに各カテゴリ(X軸値)における間隔を強調するドロップバーを描画
複数系列を持つ折れ線チャートに各カテゴリ(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曲面チャート専用のプロパティ
3D曲面チャート専用のプロパティ
Java
ISurfacePropertySet surface = chart.gethSurfaceProperties();
surface.setSurfaceColor(Color.green);
setHeatmapColors
ヒートマップの色を指定
ヒートマップの色を指定
Java
chart.setHeatmapColors(new Color[] {Color.red,Color.green,Color.blue});
setHiLowAsCandleStick
ローソク足チャートの形式で HLCO チャートを表示するために使用
ローソク足チャートの形式で HLCO チャートを表示するために使用
Java
chart.setHiLowAsCandleStick(true);
IHistogramInfo
ヒストグラムの有効化やそれに関連する様々なプロパティを設定/取得。
縦/横カラムチャート、折れ線チャート、エリアチャートの特定の構成で利用可能です。
また、変更を反映するために、refresh()が必要となります。
ヒストグラムの有効化やそれに関連する様々なプロパティを設定/取得。
縦/横カラムチャート、折れ線チャート、エリアチャートの特定の構成で利用可能です。
また、変更を反映するために、refresh()が必要となります。
Java
IHistogramInfo hisfo = chart.gethHistogramInfo();
hisfo.setLowerBound(20);
hisfo.setUpperBound(80);
hisfo.setRounded(true);
hisfo.setScale(10);
hisfo.setHistogram(true);
chart.refresh();
チャートへ文字列を追加するAPI
IAnnotation、IAnnotationSet
注釈(任意文字ラベル)文字列をIAnnotationで作成、設定し、IAnnotationSetで特定オブジェクトへの注釈として追加、削除
注釈(任意文字ラベル)文字列を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で任意位置への文字列の追加、削除
文字列を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、IDataLine、IReferenceObj
チャートプロット上の値を基にして、線や図形を追加できます。
チャートプロット上の値を基にして、線や図形を追加できます。
- 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で追加、削除
プロット上の特定範囲、範囲内の描画(色など)を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で追加、削除
特定座標間をつなぐ、線を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のサブインターフェイスとして含まれる文字列のフォントや色、角度などを指定
IAnnotation、ILabel、INoDataToPlotMessage、ITextStringのサブインターフェイスとして含まれる文字列のフォントや色、角度などを指定
Java
IAxis xaxis = chart.gethXAxis();
xaxis.gethLabel().setAngle(45);
IGradientPropertySet、IGradientSupport
IAnnotation、ICanvas、ILegend、IPlot、ISecondaryChartのサブインターフェイスとしてグラデーションに関する設定情報を設定、取得
IAnnotation、ICanvas、ILegend、IPlot、ISecondaryChartのサブインターフェイスとしてグラデーションに関する設定情報を設定、取得
Java
ICanvas canvas = chart.gethCanvas();
canvas.setGradientEnabled(true);
canvas.setGradientDesColor(Color.blue);
チャートのソースデータを参照、変更するAPI
IInputData、IResultSet、IRSMetaData、IRow、IColumnMap
生成ずみのチャートのソースデータの変更や、データ自体の参照、変更
生成ずみのチャートのソースデータの変更や、データ自体の参照、変更
- ソースデータ全体の参照:IResultSet getData()
- ソースデータ全体の変更:setData(IResultSet rs)
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);
- 行の追加:addRow(IRow r)
- 行の削除:deleteRow(int rowId)
- 行の更新:updateRow(int rowId, IRow r)
- 行の参照:IRow getRow(int rowId)
- 行数の参照:int getRowCount()
これらは、あくまでもチャートに読み込む値のみが変更します。ソースデータファイルやデータベース上の値が変更されるわけではありません。
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"
- データマッピング情報の取得:IColumnMap
- データマッピング情報の設定:setColumnMap(IColumnMap)
- データマッピング情報の作成:ColInfo
- データマッピング用定数:IMapConstants
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、setDatabaseInfo、getQueryFilename、setQueryFilename、readQueryFile
ソースデータとなるデータベースの情報やクエリファイルを取得/設定 - getDataFile、setDataFile
ソースデータとなるデータファイルの情報を取得/設定 - getSalesForceQueryInfo、setSalesForceQueryInfo
ソースデータとなるSalesforceクエリ情報を取得/設定 - getExcelFileInfo、setExcelFileInfo、getSpreadSheetModel、setSpreadSheetModel、getTransposedColumn、setSpreadSheetFormat
ソースデータとなるエクセルファイルの情報を取得/設定、スプレッドシート上の転置を指定 - getXMLFile、setXMLFile、getXMLFileQueryInfo、setXMLFileQueryInfo、getDTDFile
ソースデータとなるXMLファイルの情報とクエリ情報を取得/設定
関連するトピックス:
- Ver5からのフォントサイズ【Javaチャート・グラフ作成ツールEspressChart】
- 棒グラフの色を各棒ごとに手動で設定を行う方法
- EspressChartのAPIを使用してのチャートの色やプロットの形を指定する方法【Javaチャート・グラフ作成ツールEspressChart】
- 複数チャートの描画について【EspressChart:API使用方法】
- 同一シリーズからのチャートでの個別な色使用 Ver5.0【Javaチャート・グラフ作成ツールEspressChart】
- EspressChartのAPIを使用してのラベルの表示位置の調整方法【Javaチャート・グラフ作成ツールEspressChart】
- チャート・グラフをWeb上に展開するプログラム【Javaチャート・グラフ作成ツールEspressChart】
- チャート座標と画像座標の変換方法[EspressChart]
- 背景色の設定(Java実行時)【Javaチャート・グラフ作成ツールEspressChart】
- 画像を用いた独自パターンの作成方法