Scatterplot facet can now filter the rows.

git-svn-id: http://google-refine.googlecode.com/svn/trunk@492 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
David Huynh 2010-04-17 05:59:25 +00:00
parent 85d7ed6b89
commit 3b63e0b969
7 changed files with 25 additions and 38 deletions

View File

@ -39,11 +39,9 @@ public class Engine implements Jsonizable {
public FilteredRows getFilteredRows(Facet except, boolean includeContextual) { public FilteredRows getFilteredRows(Facet except, boolean includeContextual) {
ConjunctiveFilteredRows cfr = new ConjunctiveFilteredRows(includeContextual, _includeDependent); ConjunctiveFilteredRows cfr = new ConjunctiveFilteredRows(includeContextual, _includeDependent);
for (Facet facet : _facets) { for (Facet facet : _facets) {
System.out.println("facet: " + facet);
if (facet != except) { if (facet != except) {
RowFilter rowFilter = facet.getRowFilter(); RowFilter rowFilter = facet.getRowFilter();
if (rowFilter != null) { if (rowFilter != null) {
System.out.println(" rowFilter: " + rowFilter);
cfr.add(rowFilter); cfr.add(rowFilter);
} }
} }

View File

@ -27,11 +27,6 @@ public class ScatterplotDrawingRowVisitor implements RowVisitor {
double l; double l;
double dot; double dot;
double from_x;
double from_y;
double to_x;
double to_y;
double min_x; double min_x;
double max_x; double max_x;
double min_y; double min_y;
@ -44,8 +39,7 @@ public class ScatterplotDrawingRowVisitor implements RowVisitor {
public ScatterplotDrawingRowVisitor( public ScatterplotDrawingRowVisitor(
int col_x, int col_y, double min_x, double max_x, double min_y, double max_y, int col_x, int col_y, double min_x, double max_x, double min_y, double max_y,
int size, int dim_x, int dim_y, int rotation, double dot, Color color, int size, int dim_x, int dim_y, int rotation, double dot, Color color)
double from_x, double from_y, double to_x, double to_y)
{ {
this.col_x = col_x; this.col_x = col_x;
this.col_y = col_y; this.col_y = col_y;
@ -59,10 +53,6 @@ public class ScatterplotDrawingRowVisitor implements RowVisitor {
this.dim_x = dim_x; this.dim_x = dim_x;
this.dim_y = dim_y; this.dim_y = dim_y;
this.rotation = rotation; this.rotation = rotation;
this.from_x = from_x;
this.from_y = from_y;
this.to_x = to_x;
this.to_y = to_y;
l = (double) size; l = (double) size;

View File

@ -166,6 +166,7 @@ public class ScatterplotFacet implements Facet {
name = o.getString(NAME); name = o.getString(NAME);
size = (o.has(SIZE)) ? o.getInt(SIZE) : 100; size = (o.has(SIZE)) ? o.getInt(SIZE) : 100;
l = size;
dot = (o.has(DOT)) ? o.getInt(DOT) : 0.5d; dot = (o.has(DOT)) ? o.getInt(DOT) : 0.5d;
@ -184,6 +185,10 @@ public class ScatterplotFacet implements Facet {
Column x_column = project.columnModel.getColumnByName(columnName_x); Column x_column = project.columnModel.getColumnByName(columnName_x);
if (x_column != null) { if (x_column != null) {
columnIndex_x = x_column.getCellIndex(); columnIndex_x = x_column.getCellIndex();
NumericBinIndex index_x = ScatterplotFacet.getBinIndex(project, x_column, eval_x, expression_x);
min_x = index_x.getMin();
max_x = index_x.getMax();
} else { } else {
errorMessage_x = "No column named " + columnName_x; errorMessage_x = "No column named " + columnName_x;
} }
@ -210,6 +215,10 @@ public class ScatterplotFacet implements Facet {
Column y_column = project.columnModel.getColumnByName(columnName_y); Column y_column = project.columnModel.getColumnByName(columnName_y);
if (y_column != null) { if (y_column != null) {
columnIndex_y = y_column.getCellIndex(); columnIndex_y = y_column.getCellIndex();
NumericBinIndex index_y = ScatterplotFacet.getBinIndex(project, y_column, eval_y, expression_y);
min_y = index_y.getMin();
max_y = index_y.getMax();
} else { } else {
errorMessage_y = "No column named " + columnName_y; errorMessage_y = "No column named " + columnName_y;
} }
@ -239,8 +248,11 @@ public class ScatterplotFacet implements Facet {
protected boolean checkValues(double x, double y) { protected boolean checkValues(double x, double y) {
Point2D.Double p = new Point2D.Double(x,y); Point2D.Double p = new Point2D.Double(x,y);
p = translateCoordinates(p, dim_x, dim_y, rotation, l, min_x, max_x, min_y, max_y); p = translateCoordinates(p, dim_x, dim_y, rotation, l, min_x, max_x, min_y, max_y);
boolean value = p.x >= from_x && p.x < to_x && p.y >= from_y && p.y < to_y; boolean value = p.x >= from_x && p.x < to_x && p.y >= from_y && p.y < to_y;
System.out.println(p + " " + value);
//System.out.println(p + " " + value);
return value; return value;
}; };
}; };
@ -283,8 +295,7 @@ public class ScatterplotFacet implements Facet {
if (index_x.isNumeric() && index_y.isNumeric()) { if (index_x.isNumeric() && index_y.isNumeric()) {
ScatterplotDrawingRowVisitor drawer = new ScatterplotDrawingRowVisitor( ScatterplotDrawingRowVisitor drawer = new ScatterplotDrawingRowVisitor(
columnIndex_x, columnIndex_y, min_x, max_x, min_y, max_y, columnIndex_x, columnIndex_y, min_x, max_x, min_y, max_y,
size, dim_x, dim_y, rotation, dot, color, size, dim_x, dim_y, rotation, dot, color
from_x, from_y, to_x, to_y
); );
filteredRows.accept(project, drawer); filteredRows.accept(project, drawer);

View File

@ -67,7 +67,11 @@ abstract public class DualExpressionsNumberComparisonRowFilter implements RowFil
if (vx instanceof Number && vy instanceof Number) { if (vx instanceof Number && vy instanceof Number) {
double dx = ((Number) vx).doubleValue(); double dx = ((Number) vx).doubleValue();
double dy = ((Number) vy).doubleValue(); double dy = ((Number) vy).doubleValue();
return (!Double.isInfinite(dx) && !Double.isNaN(dx) && !Double.isInfinite(dy) && !Double.isNaN(dy) && checkValue(dx,dy)); return (!Double.isInfinite(dx) &&
!Double.isNaN(dx) &&
!Double.isInfinite(dy) &&
!Double.isNaN(dy) &&
checkValues(dx,dy));
} else { } else {
return false; return false;
} }

View File

@ -64,11 +64,6 @@ public class GetScatterplotCommand extends Command {
double max_x = 0; double max_x = 0;
double max_y = 0; double max_y = 0;
double from_x = 0;
double to_x = 0;
double from_y = 0;
double to_y = 0;
int columnIndex_x = 0; int columnIndex_x = 0;
int columnIndex_y = 0; int columnIndex_y = 0;
@ -105,11 +100,6 @@ public class GetScatterplotCommand extends Command {
Gridworks.warn("error parsing expression", e); Gridworks.warn("error parsing expression", e);
} }
if (o.has(ScatterplotFacet.FROM_X) && o.has(ScatterplotFacet.TO_X)) {
from_x = o.getDouble(ScatterplotFacet.FROM_X);
to_x = o.getDouble(ScatterplotFacet.TO_X);
}
String columnName_y = o.getString(ScatterplotFacet.Y_COLUMN_NAME); String columnName_y = o.getString(ScatterplotFacet.Y_COLUMN_NAME);
String expression_y = (o.has(ScatterplotFacet.Y_EXPRESSION)) ? o.getString(ScatterplotFacet.Y_EXPRESSION) : "value"; String expression_y = (o.has(ScatterplotFacet.Y_EXPRESSION)) ? o.getString(ScatterplotFacet.Y_EXPRESSION) : "value";
@ -128,11 +118,6 @@ public class GetScatterplotCommand extends Command {
Gridworks.warn("error parsing expression", e); Gridworks.warn("error parsing expression", e);
} }
if (o.has(ScatterplotFacet.FROM_Y) && o.has(ScatterplotFacet.TO_Y)) {
from_y = o.getDouble(ScatterplotFacet.FROM_Y);
to_y = o.getDouble(ScatterplotFacet.TO_Y);
}
NumericBinIndex index_x = null; NumericBinIndex index_x = null;
NumericBinIndex index_y = null; NumericBinIndex index_y = null;
@ -157,8 +142,7 @@ public class GetScatterplotCommand extends Command {
if (index_x != null && index_y != null && index_x.isNumeric() && index_y.isNumeric()) { if (index_x != null && index_y != null && index_x.isNumeric() && index_y.isNumeric()) {
ScatterplotDrawingRowVisitor drawer = new ScatterplotDrawingRowVisitor( ScatterplotDrawingRowVisitor drawer = new ScatterplotDrawingRowVisitor(
columnIndex_x, columnIndex_y, min_x, max_x, min_y, max_y, columnIndex_x, columnIndex_y, min_x, max_x, min_y, max_y,
size, dim_x, dim_y, rotation, dot, color, size, dim_x, dim_y, rotation, dot, color
from_x, from_y, to_x, to_y
); );
FilteredRows filteredRows = engine.getAllFilteredRows(false); FilteredRows filteredRows = engine.getAllFilteredRows(false);
filteredRows.accept(project, drawer); filteredRows.accept(project, drawer);

View File

@ -34,7 +34,7 @@ ScatterplotFacet.prototype.getJSON = function() {
}; };
ScatterplotFacet.prototype.hasSelection = function() { ScatterplotFacet.prototype.hasSelection = function() {
// TODO return ("from_x" in this._config);
}; };
ScatterplotFacet.prototype._initializeUI = function() { ScatterplotFacet.prototype._initializeUI = function() {
@ -61,7 +61,7 @@ ScatterplotFacet.prototype._initializeUI = function() {
var params = { var params = {
project: theProject.id, project: theProject.id,
engine: JSON.stringify(ui.browsingEngine.getJSON()), engine: JSON.stringify(ui.browsingEngine.getJSON(false, this)),
plotter: JSON.stringify(this._config) plotter: JSON.stringify(this._config)
}; };
var url = "/command/get-scatterplot?" + $.param(params); var url = "/command/get-scatterplot?" + $.param(params);

View File

@ -98,14 +98,14 @@ BrowsingEngine.prototype._updateFacetOrder = function() {
this._facets = newFacets; this._facets = newFacets;
}; };
BrowsingEngine.prototype.getJSON = function(keepUnrestrictedFacets) { BrowsingEngine.prototype.getJSON = function(keepUnrestrictedFacets, except) {
var a = { var a = {
facets: [], facets: [],
includeDependent: this._elmts.includeDependentRowsCheck[0].checked includeDependent: this._elmts.includeDependentRowsCheck[0].checked
}; };
for (var i = 0; i < this._facets.length; i++) { for (var i = 0; i < this._facets.length; i++) {
var facet = this._facets[i]; var facet = this._facets[i];
if (keepUnrestrictedFacets || facet.facet.hasSelection()) { if ((keepUnrestrictedFacets || facet.facet.hasSelection()) && (facet.facet != except)) {
a.facets.push(this._facets[i].facet.getJSON()); a.facets.push(this._facets[i].facet.getJSON());
} }
} }