AbstractPlotter.java
/*
* Created on 2005/08/03
* Copyright (C) 2005 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.graph;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.IntMatrix;
import org.mklab.nfc.scalar.DoubleNumberUtil;
import org.mklab.tool.graph.gnuplot.decoration.LogScale;
/**
* @author koga
* @version $Revision: 1.19 $, 2005/08/03
*/
public abstract class AbstractPlotter implements Plotter {
/**
* @param xData x方向のデータ
*/
public void plot(DoubleMatrix xData) {
setLogScale(LogScale.LOG_SCALE_NO);
plot1D(xData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData) {
plot(xData, yData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames) {
plot(xData, yData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1) {
plot(xData, yData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1, String[] attribute2) {
setLogScale(LogScale.LOG_SCALE_NO);
plot2D(xData, yData, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
plot(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
plot(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
plot(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void plot(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
setLogScale(LogScale.LOG_SCALE_NO);
plot3D(xData, yData, zData, lineNames, attribute1, attribute2);
}
/**
* @param zData z方向のデータ
*/
public void plotSurface(DoubleMatrix zData) {
setLogScale(LogScale.LOG_SCALE_NO);
plot3DSurface(zData);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
@SuppressWarnings("nls")
public void plotSurface(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
plotSurface(xData, yData, zData, "", "", "");
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineName ラインの名前
*/
@SuppressWarnings("nls")
public void plotSurface(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String lineName) {
plotSurface(xData, yData, zData, lineName, "", "");
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineName ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
@SuppressWarnings("nls")
public void plotSurface(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String lineName, String attribute1) {
plotSurface(xData, yData, zData, lineName, attribute1, "");
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineName ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void plotSurface(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String lineName, String attribute1, String attribute2) {
setLogScale(LogScale.LOG_SCALE_NO);
plot3DSurface(xData, yData, zData, lineName, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData) {
semilogx(xData, yData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames) {
semilogx(xData, yData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1) {
semilogx(xData, yData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredX = getNonZeroAssuredMatrix(xData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_X);
plot2D(assuredX, yData, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogx(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogx(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogx(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogx(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredX = getNonZeroAssuredMatrix(xData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_X);
plot3D(assuredX, yData, zData, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData) {
semilogy(xData, yData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames) {
semilogy(xData, yData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1) {
semilogy(xData, yData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredY = getNonZeroAssuredMatrix(yData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_Y);
plot2D(xData, assuredY, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogy(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogy(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogy(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredY = getNonZeroAssuredMatrix(yData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_Y);
plot3D(xData, assuredY, zData, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogz(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogz(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogz(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredZ = getNonZeroAssuredMatrix(zData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_Z);
plot3D(xData, yData, assuredZ, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
*/
public void loglog(DoubleMatrix xData, DoubleMatrix yData) {
loglog(xData, yData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
*/
public void loglog(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames) {
loglog(xData, yData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void loglog(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1) {
loglog(xData, yData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void loglog(DoubleMatrix xData, DoubleMatrix yData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredX = getNonZeroAssuredMatrix(xData);
DoubleMatrix assuredY = getNonZeroAssuredMatrix(yData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_XY);
plot2D(assuredX, assuredY, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogxy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogxy(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogxy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogxy(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogxy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogxy(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogxy(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredX = getNonZeroAssuredMatrix(xData);
DoubleMatrix assuredY = getNonZeroAssuredMatrix(yData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_XY);
plot3D(assuredX, assuredY, zData, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogxz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogxz(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogxz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogxz(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogxz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogxz(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogxz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredX = getNonZeroAssuredMatrix(xData);
DoubleMatrix assuredZ = getNonZeroAssuredMatrix(zData);
setLogScale(LogScale.LOG_SCALE_XZ);
setGridVisible(true);
plot3D(assuredX, yData, assuredZ, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogyz(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogyz(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogyz(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredY = getNonZeroAssuredMatrix(yData);
DoubleMatrix assuredZ = getNonZeroAssuredMatrix(zData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_YZ);
plot3D(xData, assuredY, assuredZ, lineNames, attribute1, attribute2);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
*/
public void semilogxyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData) {
semilogxyz(xData, yData, zData, new String[0], new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
*/
public void semilogxyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames) {
semilogxyz(xData, yData, zData, lineNames, new String[0], new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
*/
public void semilogxyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1) {
semilogxyz(xData, yData, zData, lineNames, attribute1, new String[0]);
}
/**
* @param xData x方向のデータ
* @param yData y方向のデータ
* @param zData z方向のデータ
* @param lineNames ラインの名前
* @param attribute1 ラインの名前の前に指定する属性
* @param attribute2 ラインの名前の後に指定する属性
*/
public void semilogxyz(DoubleMatrix xData, DoubleMatrix yData, DoubleMatrix zData, String[] lineNames, String[] attribute1, String[] attribute2) {
DoubleMatrix assuredX = getNonZeroAssuredMatrix(xData);
DoubleMatrix assuredY = getNonZeroAssuredMatrix(yData);
DoubleMatrix assuredZ = getNonZeroAssuredMatrix(zData);
setGridVisible(true);
setLogScale(LogScale.LOG_SCALE_XYZ);
plot3D(assuredX, assuredY, assuredZ, lineNames, attribute1, attribute2);
}
/**
* 3次元空間に2次元平面を描画します。
*
* @param zData z方向のデータ
*/
@SuppressWarnings("nls")
public void plot3DSurface(DoubleMatrix zData) {
int xSize = zData.getRowSize();
int ySize = zData.getColumnSize();
DoubleMatrix xData = new DoubleMatrix(xSize, ySize);
for (int i = 1; i <= xSize; i++) {
xData.setRowVector(i, new DoubleMatrix(IntMatrix.series(1, ySize)));
}
DoubleMatrix yData = new DoubleMatrix(ySize, xSize);
for (int i = 1; i <= ySize; i++) {
yData.setRowVector(i, new DoubleMatrix(IntMatrix.series(1, xSize)));
}
yData = yData.transpose();
plot3DSurface(xData, yData, zData, "", "", "");
}
/**
* 成分が零ならば、その成分を微小な値に置き換えが行列を生成します。
*
* @param xData x方向のデータ 成分を調べる行列
* @return 生成された行列
*/
private DoubleMatrix getNonZeroAssuredMatrix(DoubleMatrix xData) {
IntMatrix idxx = xData.getColumnVector(1).compareElementWise(".==", 0).find(); //$NON-NLS-1$
if (idxx.length() != 0) {
DoubleMatrix tolerance = DoubleMatrix.ones(idxx.length(), 1).multiply(DoubleNumberUtil.EPS);
DoubleMatrix cloneX = xData.createClone();
cloneX.setSubMatrix(idxx, 1, tolerance);
return cloneX;
}
return xData;
}
}