in src/components/src/main/java/org/apache/jmeter/visualizers/AxisGraph.java [342:434]
private void drawSample(String _title, int _maxLength, String[] _xAxisLabels,
String _yAxisTitle, String[] _legendLabels, double[][] _data,
int _width, int _height, Color[] _color,
Font legendFont, Graphics g) {
double max = maxYAxisScale > 0 ? maxYAxisScale : findMax(_data); // define max scale y axis
try {
// Width and Height are already set in StatGraphVisualizer
if (_maxLength < 3) {
_maxLength = 3;
}
// if the "Title of Graph" is empty, we can assume some default
if (_title.isEmpty()) {
_title = JMeterUtils.getResString("aggregate_graph_title"); //$NON-NLS-1$
}
// if the labels are too long, they'll be "squeezed" to make the chart viewable.
for (int i = 0; i < _xAxisLabels.length; i++) {
String label = _xAxisLabels[i];
if (label.isEmpty()) {
label = "<empty>";
}
_xAxisLabels[i]=squeeze(label, _maxLength);
}
this.setPreferredSize(new Dimension(_width,_height));
// _xAxisTitle to null (don't display x axis title)
DataSeries dataSeries = new DataSeries( _xAxisLabels, null, _yAxisTitle, _title );
ClusteredBarChartProperties clusteredBarChartProperties= new ClusteredBarChartProperties();
clusteredBarChartProperties.setShowOutlinesFlag(outlinesBarFlag);
ValueLabelRenderer valueLabelRenderer = new ValueLabelRenderer(false, false, showGrouping, 0);
valueLabelRenderer.setValueLabelPosition(ValueLabelPosition.AT_TOP);
valueLabelRenderer.setValueChartFont(new ChartFont(valueFont, foreColor));
valueLabelRenderer.useVerticalLabels(valueOrientation);
clusteredBarChartProperties.addPostRenderEventListener(valueLabelRenderer);
Paint[] paints = new Paint[_color.length];
System.arraycopy(_color, 0, paints, 0, paints.length);
AxisChartDataSet axisChartDataSet =
new AxisChartDataSet(
_data, _legendLabels, paints, ChartType.BAR_CLUSTERED, clusteredBarChartProperties );
dataSeries.addIAxisPlotDataSet( axisChartDataSet );
ChartProperties chartProperties= new ChartProperties();
LabelAxisProperties xaxis = new LabelAxisProperties();
DataAxisProperties yaxis = new DataAxisProperties();
yaxis.setUseCommas(showGrouping);
if (legendFont != null) {
yaxis.setAxisTitleChartFont(new ChartFont(legendFont, new Color(20)));
yaxis.setScaleChartFont(new ChartFont(legendFont, new Color(20)));
xaxis.setAxisTitleChartFont(new ChartFont(legendFont, new Color(20)));
xaxis.setScaleChartFont(new ChartFont(legendFont, new Color(20)));
}
if (titleFont != null) {
chartProperties.setTitleFont(new ChartFont(titleFont, new Color(0)));
}
// Y Axis
try {
BigDecimal round = BigDecimal.valueOf(max / 1000d);
round = round.setScale(0, RoundingMode.UP);
double topValue = round.doubleValue() * 1000;
yaxis.setUserDefinedScale(0, 500);
yaxis.setNumItems((int) (topValue / 500)+1);
yaxis.setShowGridLines(1);
} catch (PropertyException e) {
log.warn("Chart property exception occurred.", e);
}
AxisProperties axisProperties= new AxisProperties(xaxis, yaxis);
axisProperties.setXAxisLabelsAreVertical(true);
LegendProperties legendProperties= new LegendProperties();
legendProperties.setBorderStroke(null);
legendProperties.setPlacement(legendPlacement);
legendProperties.setIconBorderPaint(Color.WHITE);
if (legendPlacement == LegendAreaProperties.RIGHT || legendPlacement == LegendAreaProperties.LEFT) {
legendProperties.setNumColumns(1);
}
if (legendFont != null) {
legendProperties.setFont(legendFont); //new Font("SansSerif", Font.PLAIN, 10)
}
AxisChart axisChart = new AxisChart(
dataSeries, chartProperties, axisProperties,
legendProperties, _width, _height );
axisChart.setGraphics2D((Graphics2D) g);
axisChart.render();
} catch (ChartDataException | PropertyException e) {
log.warn("Exception occurred while rendering chart.", e);
}
}