use of org.jfree.chart.labels.StandardXYZToolTipGenerator in project pentaho-platform by pentaho.
the class JFreeChartEngine method createXYZSeriesCollectionChart.
/*
* New char types based on the XYZSeriesCollectionChartDefinition
*/
private static JFreeChart createXYZSeriesCollectionChart(final XYZSeriesCollectionChartDefinition chartDefinition) {
JFreeChart chart = null;
// TODO Make the following accessible from the chartDefinition
String domainAxisLabel = null;
String rangeAxisLabel = null;
boolean tooltips = true;
boolean urls = true;
// -----------------------------------------------------------
String title = chartDefinition.getTitle();
boolean legend = chartDefinition.isLegendIncluded();
NumberAxis domainAxis = chartDefinition.isThreeD() ? new NumberAxis3D(domainAxisLabel) : new NumberAxis(domainAxisLabel);
domainAxis.setAutoRangeIncludesZero(chartDefinition.isDomainIncludesZero());
domainAxis.setAutoRangeStickyZero(chartDefinition.isDomainStickyZero());
NumberAxis rangeAxis = new NumberAxis(rangeAxisLabel);
rangeAxis.setAutoRangeIncludesZero(chartDefinition.isRangeIncludesZero());
rangeAxis.setAutoRangeStickyZero(chartDefinition.isRangeStickyZero());
BubbleRenderer renderer = null;
// So far only Bubble charts are supported
switch(chartDefinition.getChartType()) {
case BUBBLE_CHART_TYPE:
renderer = new BubbleRenderer();
break;
default:
// should log an error if invalid chart type passed in - at least return null for no renderer
return null;
}
if (tooltips) {
// creating the label definition
renderer.setToolTipGenerator(new StandardXYZToolTipGenerator(chartDefinition.getBubbleLabelContent(), chartDefinition.getXFormat(), chartDefinition.getYFormat(), chartDefinition.getZFormat()));
}
if (urls) {
renderer.setURLGenerator(new StandardBubbleURLGenerator());
}
renderer.setMaxSize(chartDefinition.getMaxBubbleSize());
renderer.setMaxZ(chartDefinition.getMaxZValue());
XYPlot plot = new XYPlot(chartDefinition, domainAxis, rangeAxis, renderer);
JFreeChartEngine.updatePlot(plot, chartDefinition);
chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend);
return chart;
}
use of org.jfree.chart.labels.StandardXYZToolTipGenerator in project tdq-studio-se by Talend.
the class TopChartFactory method createBubbleChart.
/**
* Creates a bubble chart with default settings. The chart is composed of an {@link XYPlot}, with a {@link NumberAxis} for the
* domain axis, a {@link NumberAxis} for the range axis, and an {@link XYBubbleRenderer} to draw the data items.
*
* This method is copied from
* {@link org.jfree.chart.ChartFactory#createBubbleChart(String, String, String, XYZDataset, PlotOrientation, boolean, boolean, boolean)}
*
* @param title the chart title (<code>null</code> permitted).
* @param xAxisLabel a label for the X-axis (<code>null</code> permitted).
* @param yAxisLabel a label for the Y-axis (<code>null</code> permitted).
* @param dataset the dataset for the chart (<code>null</code> permitted).
* @param orientation the orientation (horizontal or vertical) (<code>null</code> NOT permitted).
* @param legend a flag specifying whether or not a legend is required.
* @param tooltips configure chart to generate tool tips?
* @param urls configure chart to generate URLs?
*
* @return A bubble chart.
*/
public static JFreeChart createBubbleChart(String title, String xAxisLabel, String yAxisLabel, XYZDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) {
if (orientation == null) {
// $NON-NLS-1$
throw new IllegalArgumentException(Messages.getString("TopChartFactory.argument"));
}
NumberAxis xAxis = new NumberAxis(xAxisLabel);
xAxis.setAutoRangeIncludesZero(false);
NumberAxis yAxis = new NumberAxis(yAxisLabel);
yAxis.setAutoRangeIncludesZero(false);
XYPlot plot = new XYPlot(dataset, xAxis, yAxis, null);
XYItemRenderer renderer = new XYBubbleRenderer(XYBubbleRenderer.SCALE_ON_RANGE_AXIS) {
@Override
public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) {
// return straight away if the item is not visible
if (!getItemVisible(series, item)) {
return;
}
PlotOrientation orientation = plot.getOrientation();
// get the data point...
double x = dataset.getXValue(series, item);
double y = dataset.getYValue(series, item);
double z = Double.NaN;
if (dataset instanceof XYZDataset) {
XYZDataset xyzData = (XYZDataset) dataset;
z = xyzData.getZValue(series, item);
}
if (!Double.isNaN(z)) {
RectangleEdge domainAxisLocation = plot.getDomainAxisEdge();
RectangleEdge rangeAxisLocation = plot.getRangeAxisEdge();
double transX = domainAxis.valueToJava2D(x, dataArea, domainAxisLocation);
double transY = rangeAxis.valueToJava2D(y, dataArea, rangeAxisLocation);
double transDomain = 0.0;
double transRange = 0.0;
double zero;
// MOD scorreia +2L avoid points: minimal size of circle must be 1
// z = z * transX + 1;
// ADD xqliu 2009-07-06 bug 8035
// calculate the multiple of bubble's default size
double zSize = getBubbleSize(z);
// use bubble's default size
z = 0;
switch(getScaleType()) {
case SCALE_ON_DOMAIN_AXIS:
zero = domainAxis.valueToJava2D(0.0, dataArea, domainAxisLocation);
transDomain = domainAxis.valueToJava2D(z, dataArea, domainAxisLocation) - zero;
transRange = transDomain;
break;
case SCALE_ON_RANGE_AXIS:
zero = rangeAxis.valueToJava2D(0.0, dataArea, rangeAxisLocation);
transRange = zero - rangeAxis.valueToJava2D(z, dataArea, rangeAxisLocation);
transDomain = transRange;
break;
default:
double zero1 = domainAxis.valueToJava2D(0.0, dataArea, domainAxisLocation);
double zero2 = rangeAxis.valueToJava2D(0.0, dataArea, rangeAxisLocation);
transDomain = domainAxis.valueToJava2D(z, dataArea, domainAxisLocation) - zero1;
transRange = zero2 - rangeAxis.valueToJava2D(z, dataArea, rangeAxisLocation);
}
transDomain = Math.abs(transDomain);
transRange = Math.abs(transRange);
// MODSCA 2008-11-27 enlarge ellipse by diag% of the total diagonal
double diag = Math.sqrt(dataArea.getHeight() * dataArea.getHeight() + dataArea.getWidth() * dataArea.getWidth());
transDomain += diag / 100;
transRange += diag / 100;
Ellipse2D circle = null;
// ADD xqliu 2009-07-06 bug 8035
transDomain *= zSize;
transRange *= zSize;
if (orientation == PlotOrientation.VERTICAL) {
circle = new Ellipse2D.Double(transX - transDomain / 2.0, transY - transRange / 2.0, transDomain, transRange);
} else if (orientation == PlotOrientation.HORIZONTAL) {
circle = new Ellipse2D.Double(transY - transRange / 2.0, transX - transDomain / 2.0, transRange, transDomain);
}
g2.setPaint(getItemPaint(series, item));
g2.fill(circle);
g2.setStroke(getItemOutlineStroke(series, item));
g2.setPaint(getItemOutlinePaint(series, item));
g2.draw(circle);
if (isItemLabelVisible(series, item)) {
if (orientation == PlotOrientation.VERTICAL) {
drawItemLabel(g2, orientation, dataset, series, item, transX, transY, false);
} else if (orientation == PlotOrientation.HORIZONTAL) {
drawItemLabel(g2, orientation, dataset, series, item, transY, transX, false);
}
}
// add an entity if this info is being collected
EntityCollection entities = null;
if (info != null) {
entities = info.getOwner().getEntityCollection();
if (entities != null && circle.intersects(dataArea)) {
addEntity(entities, circle, dataset, series, item, circle.getCenterX(), circle.getCenterY());
}
}
int domainAxisIndex = plot.getDomainAxisIndex(domainAxis);
int rangeAxisIndex = plot.getRangeAxisIndex(rangeAxis);
updateCrosshairValues(crosshairState, x, y, domainAxisIndex, rangeAxisIndex, transX, transY, orientation);
}
}
/**
* DOC xqliu : calculate the size of bubble. for bug 8035 2009-07-06.
*
* @param z multiple of bubble's default size
* @return
*/
private double getBubbleSize(double z) {
if (z > 0 && z <= 10) {
return 2;
} else if (z > 10 && z <= 100) {
return 3;
} else if (z > 100) {
return 4;
}
return 1;
}
};
if (tooltips) {
renderer.setBaseToolTipGenerator(new StandardXYZToolTipGenerator());
}
if (urls) {
renderer.setURLGenerator(new StandardXYZURLGenerator());
}
plot.setRenderer(renderer);
plot.setOrientation(orientation);
JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend);
return chart;
}
use of org.jfree.chart.labels.StandardXYZToolTipGenerator in project tdq-studio-se by Talend.
the class TopChartFactory method createBubbleChart.
/**
* Method "createBubbleChart".
*
* @param indic the indicator
* @param numericColumn the analyzed numeric column
* @return the bubble chart
*/
public static JFreeChart createBubbleChart(String chartName, Object dataset, Map<String, ValueAggregator> xyzDatasets) {
final Map<String, ValueAggregator> xyzDatasetsFinal = xyzDatasets;
JFreeChart chart = TopChartFactory.createBubbleChart(chartName, // $NON-NLS-1$ //$NON-NLS-2$
Messages.getString("TopChartFactory.average"), // $NON-NLS-1$ //$NON-NLS-2$
Messages.getString("TopChartFactory.count"), // $NON-NLS-1$ //$NON-NLS-2$
(DefaultXYZDataset) dataset, // $NON-NLS-1$ //$NON-NLS-2$
PlotOrientation.HORIZONTAL, true, true, true);
final XYPlot plot = (XYPlot) chart.getPlot();
final XYItemRenderer renderer = plot.getRenderer();
renderer.setBaseToolTipGenerator(new StandardXYZToolTipGenerator() {
private static final long serialVersionUID = 1L;
/*
* (non-Javadoc)
*
* @see org.jfree.chart.labels.StandardXYZToolTipGenerator#createItemArray(org.jfree.data.xy.XYZDataset,
* int, int)
*/
@Override
protected Object[] createItemArray(XYZDataset dset, int series, int item) {
final Comparable<?> seriesKey = dset.getSeriesKey(series);
final String seriesK = String.valueOf(seriesKey);
String label = seriesK;
if (xyzDatasetsFinal != null) {
ValueAggregator valueAggregator = xyzDatasetsFinal.get(seriesKey);
label = valueAggregator.getLabels(seriesK).get(item);
}
final Object[] itemArray = super.createItemArray(dset, series, item);
// label;
itemArray[0] = label;
// $NON-NLS-1$
itemArray[1] = "avg=" + itemArray[1];
// $NON-NLS-1$
itemArray[2] = "record count=" + itemArray[2];
// $NON-NLS-1$
itemArray[3] = "null count=" + itemArray[3];
return itemArray;
}
});
return chart;
}
Aggregations