diff options
author | Kore Nordmann <github@kore-nordmann.de> | 2009-07-14 14:13:45 +0000 |
---|---|---|
committer | Kore Nordmann <github@kore-nordmann.de> | 2009-07-14 14:13:45 +0000 |
commit | 11e6744455cadf222f828a437e095205da53da7a (patch) | |
tree | d85b763feeb930ebc2f29394475241bab0931561 | |
parent | 8262fb03d006afdc4ea1ea6c21be991178510137 (diff) | |
download | zetacomponents-graph-11e6744455cadf222f828a437e095205da53da7a.zip zetacomponents-graph-11e6744455cadf222f828a437e095205da53da7a.tar.gz |
- Implemented: #13341: Vertical Bar Charts
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | src/charts/horizontal_bar.php | 292 | ||||
-rw-r--r-- | src/charts/line.php | 74 | ||||
-rw-r--r-- | src/graph_autoload.php | 17 | ||||
-rw-r--r-- | src/interfaces/horizontal_bar_renderer.php | 48 | ||||
-rw-r--r-- | src/renderer/horizontal_bar.php | 177 | ||||
-rw-r--r-- | tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderBasicHorizontalBarChart.svg | 2 | ||||
-rw-r--r-- | tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartMultipleBars.svg | 2 | ||||
-rw-r--r-- | tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartNegativeValues.svg | 2 | ||||
-rw-r--r-- | tests/horizontal_bar_chart_renderer.php | 96 | ||||
-rw-r--r-- | tests/suite.php | 2 |
11 files changed, 674 insertions, 39 deletions
@@ -2,6 +2,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Implemented: #14294: Add option for axis label rotation +- Implemented: #13341: Vertical Bar Charts 1.4.3 - Monday 08 June 2009 diff --git a/src/charts/horizontal_bar.php b/src/charts/horizontal_bar.php new file mode 100644 index 0000000..7e4e4a0 --- /dev/null +++ b/src/charts/horizontal_bar.php @@ -0,0 +1,292 @@ +<?php +/** + * File containing the ezcGraphBarChart class + * + * @package Graph + * @version //autogentag// + * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved. + * @license http://ez.no/licenses/new_bsd New BSD License + */ +/** + * Class for bar charts. Can make use of an unlimited amount of datasets and + * will display them as bars by default. + * X axis: + * - Labeled axis + * - Boxed axis label renderer + * Y axis: + * - Numeric axis + * - Exact axis label renderer + * + * <code> + * // Create a new horizontal bar chart + * $chart = new ezcGraphHorizontalBarChart(); + * + * // Add data to line chart + * $chart->data['sample dataset'] = new ezcGraphArrayDataSet( + * array( + * '100' => 1.2, + * '200' => 43.2, + * '300' => -34.14, + * '350' => 65, + * '400' => 123, + * ) + * ); + * + * // Render chart with the special designated renderer and default SVG driver + * $chart->renderer = new ezcGraphHorizontalRenderer(); + * $chart->render( 500, 200, 'bar_chart.svg' ); + * </code> + * + * Each chart consists of several chart elements which represents logical + * parts of the chart and can be formatted independently. The bar chart + * consists of: + * - title ( {@link ezcGraphChartElementText} ) + * - legend ( {@link ezcGraphChartElementLegend} ) + * - background ( {@link ezcGraphChartElementBackground} ) + * - xAxis ( {@link ezcGraphChartElementLabeledAxis} ) + * - yAxis ( {@link ezcGraphChartElementNumericAxis} ) + * + * The type of the axis may be changed and all elements can be configured by + * accessing them as properties of the chart: + * + * <code> + * $chart->legend->position = ezcGraph::RIGHT; + * </code> + * + * The chart itself also offers several options to configure the appearance. As + * bar charts extend line charts the the extended configure options are + * available in {@link ezcGraphLineChartOptions} extending the + * {@link ezcGraphChartOptions}. + * + * @property ezcGraphLineChartOptions $options + * Chart options class + * + * @version //autogentag// + * @package Graph + * @mainclass + */ +class ezcGraphHorizontalBarChart extends ezcGraphBarChart +{ + /** + * Constructor + * + * @param array $options Default option array + * @return void + * @ignore + */ + public function __construct( array $options = array() ) + { + parent::__construct(); + + $this->addElement( 'xAxis', new ezcGraphChartElementNumericAxis() ); + $this->elements['xAxis']->axisLabelRenderer = new ezcGraphAxisCenteredLabelRenderer(); + $this->elements['xAxis']->position = ezcGraph::LEFT; + + $this->addElement( 'yAxis', new ezcGraphChartElementLabeledAxis() ); + $this->elements['yAxis']->axisLabelRenderer = new ezcGraphAxisBoxedLabelRenderer(); + $this->elements['yAxis']->position = ezcGraph::BOTTOM; + + $this->renderer = new ezcGraphHorizontalRenderer(); + } + + /** + * Render the assigned data + * + * Will renderer all charts data in the remaining boundings after drawing + * all other chart elements. The data will be rendered depending on the + * settings in the dataset. + * + * @param ezcGraphRenderer $renderer Renderer + * @param ezcGraphBoundings $boundings Remaining boundings + * @return void + */ + protected function renderData( ezcGraphRenderer $renderer, ezcGraphBoundings $boundings, ezcGraphBoundings $innerBoundings ) + { + // Use inner boundings for drawning chart data + $boundings = $innerBoundings; + + $yAxisNullPosition = $this->elements['xAxis']->getCoordinate( false ); + + // Initialize counters + $nr = array(); + $count = array(); + + foreach ( $this->data as $data ) + { + if ( !isset( $nr[$data->displayType->default] ) ) + { + $nr[$data->displayType->default] = 0; + $count[$data->displayType->default] = 0; + } + + $nr[$data->displayType->default]++; + $count[$data->displayType->default]++; + } + + $checkedRegularSteps = false; + + // Display data + foreach ( $this->data as $datasetName => $data ) + { + --$nr[$data->displayType->default]; + + // Check which axis should be used + $xAxis = ( $data->xAxis->default ? $data->xAxis->default: $this->elements['xAxis'] ); + $yAxis = ( $data->yAxis->default ? $data->yAxis->default: $this->elements['yAxis'] ); + + // Determine fill color for dataset + if ( $this->options->fillLines !== false ) + { + $fillColor = clone $data->color->default; + $fillColor->alpha = (int) round( ( 255 - $fillColor->alpha ) * ( $this->options->fillLines / 255 ) ); + } + else + { + $fillColor = null; + } + + // Ensure regular steps on axis when used with bar charts and + // precalculate some values use to render bar charts + // + // Called only once and only when bars should be rendered + if ( ( $checkedRegularSteps === false ) && + ( $data->displayType->default === ezcGraph::BAR ) ) + { + $height = $this->calculateStepWidth( $yAxis, $xAxis, $boundings->height )->y; + } + + // Draw lines for dataset + $lastPoint = false; + foreach ( $data as $key => $value ) + { + // Calculate point in chart + $point = $xAxis->axisLabelRenderer->modifyChartDataPosition( + $yAxis->axisLabelRenderer->modifyChartDataPosition( + new ezcGraphCoordinate( + $xAxis->getCoordinate( $value ), + $yAxis->getCoordinate( $key ) + ) + ) + ); + + // Render depending on display type of dataset + switch ( true ) + { + case $data->displayType->default === ezcGraph::BAR: + $renderer->drawHorizontalBar( + $boundings, + new ezcGraphContext( $datasetName, $key, $data->url[$key] ), + $data->color[$key], + $point, + $height, + $nr[$data->displayType->default], + $count[$data->displayType->default], + $data->symbol[$key], + $yAxisNullPosition + ); + + // Render highlight string if requested + if ( $data->highlight[$key] ) + { + $renderer->drawDataHighlightText( + $boundings, + new ezcGraphContext( $datasetName, $key, $data->url[$key] ), + $point, + $yAxisNullPosition, + $nr[$data->displayType->default], + $count[$data->displayType->default], + $this->options->highlightFont, + ( $data->highlightValue[$key] ? $data->highlightValue[$key] : $value ), + $this->options->highlightSize + $this->options->highlightFont->padding * 2, + ( $this->options->highlightLines ? $data->color[$key] : null ), + ( $this->options->highlightXOffset ? $this->options->highlightXOffset : 0 ), + ( $this->options->highlightYOffset ? $this->options->highlightYOffset : 0 ), + $height, + $data->displayType->default + ); + } + break; + default: + throw new ezcGraphInvalidDisplayTypeException( $data->displayType->default ); + break; + } + + // Store last point, used to connect lines in line chart. + $lastPoint = $point; + } + } + } + + /** + * Aggregate and calculate value boundings on axis. + * + * This function is nearly the same as in ezcGraphLineChart, but reverses + * the usage of keys and values for the axis. + * + * @return void + */ + protected function setAxisValues() + { + // Virtual data set build for agrregated values sums for bar charts + $virtualBarSumDataSet = array( array(), array() ); + + // Calculate axis scaling and labeling + foreach ( $this->data as $dataset ) + { + $nr = 0; + $labels = array(); + $values = array(); + foreach ( $dataset as $label => $value ) + { + $labels[] = $label; + $values[] = $value; + + // Build sum of all bars + if ( $this->options->stackBars && + ( $dataset->displayType->default === ezcGraph::BAR ) ) + { + if ( !isset( $virtualBarSumDataSet[(int) $value >= 0][$nr] ) ) + { + $virtualBarSumDataSet[(int) $value >= 0][$nr++] = $value; + } + else + { + $virtualBarSumDataSet[(int) $value >= 0][$nr++] += $value; + } + } + } + + // Check if data has been associated with another custom axis, use + // default axis otherwise. + if ( $dataset->xAxis->default ) + { + $dataset->xAxis->default->addData( $values ); + } + else + { + $this->elements['xAxis']->addData( $values ); + } + + if ( $dataset->yAxis->default ) + { + $dataset->yAxis->default->addData( array_reverse( $labels ) ); + } + else + { + $this->elements['yAxis']->addData( array_reverse( $labels ) ); + } + } + + // There should always be something assigned to the main x and y axis. + if ( !$this->elements['xAxis']->initialized || + !$this->elements['yAxis']->initialized ) + { + throw new ezcGraphNoDataException(); + } + + // Calculate boundings from assigned data + $this->elements['xAxis']->calculateAxisBoundings(); + $this->elements['yAxis']->calculateAxisBoundings(); + } +} +?> diff --git a/src/charts/line.php b/src/charts/line.php index 3348920..4c0ba14 100644 --- a/src/charts/line.php +++ b/src/charts/line.php @@ -174,6 +174,47 @@ class ezcGraphLineChart extends ezcGraphChart } /** + * Calculate bar chart step width + * + * @return void + */ + protected function calculateStepWidth( ezcGraphChartElementAxis $mainAxis, ezcGraphChartElementAxis $secondAxis, $width ) + { + $steps = $mainAxis->getSteps(); + + $stepWidth = null; + foreach ( $steps as $step ) + { + if ( $stepWidth === null ) + { + $stepWidth = $step->width; + } + elseif ( $step->width !== $stepWidth ) + { + throw new ezcGraphUnregularStepsException(); + } + } + + $step = reset( $steps ); + if ( count( $step->childs ) ) + { + // Keep this for BC reasons + $barCount = ( $mainAxis->getMajorStepCount() + 1 ) * ( $mainAxis->getMinorStepCount() - 1 ); + $stepWidth = 1 / $barCount; + } + + $checkedRegularSteps = true; + return $mainAxis->axisLabelRenderer->modifyChartDataPosition( + $secondAxis->axisLabelRenderer->modifyChartDataPosition( + new ezcGraphCoordinate( + $width * $stepWidth, + $width * $stepWidth + ) + ) + ); + } + + /** * Render the assigned data * * Will renderer all charts data in the remaining boundings after drawing @@ -236,38 +277,7 @@ class ezcGraphLineChart extends ezcGraphChart if ( ( $checkedRegularSteps === false ) && ( $data->displayType->default === ezcGraph::BAR ) ) { - $steps = $xAxis->getSteps(); - - $stepWidth = null; - foreach ( $steps as $step ) - { - if ( $stepWidth === null ) - { - $stepWidth = $step->width; - } - elseif ( $step->width !== $stepWidth ) - { - throw new ezcGraphUnregularStepsException(); - } - } - - $step = reset( $steps ); - if ( count( $step->childs ) ) - { - // Keep this for BC reasons - $barCount = ( $xAxis->getMajorStepCount() + 1 ) * ( $xAxis->getMinorStepCount() - 1 ); - $stepWidth = 1 / $barCount; - } - - $checkedRegularSteps = true; - $width = $xAxis->axisLabelRenderer->modifyChartDataPosition( - $yAxis->axisLabelRenderer->modifyChartDataPosition( - new ezcGraphCoordinate( - ( $boundings->x1 - $boundings->x0 ) * $stepWidth, - 0 - ) - ) - )->x; + $width = $this->calculateStepWidth( $xAxis, $yAxis, $boundings->width )->x; } // Draw lines for dataset diff --git a/src/graph_autoload.php b/src/graph_autoload.php index d1e2e61..c66e1a2 100644 --- a/src/graph_autoload.php +++ b/src/graph_autoload.php @@ -40,8 +40,14 @@ return array( 'ezcGraphChart' => 'Graph/interfaces/chart.php', 'ezcGraphChartElement' => 'Graph/interfaces/element.php', 'ezcGraphChartOptions' => 'Graph/options/chart.php', + 'ezcGraphLineChart' => 'Graph/charts/line.php', 'ezcGraphMatrix' => 'Graph/math/matrix.php', + 'ezcGraphOdometerRenderer' => 'Graph/interfaces/odometer_renderer.php', + 'ezcGraphRadarRenderer' => 'Graph/interfaces/radar_renderer.php', + 'ezcGraphRenderer' => 'Graph/interfaces/renderer.php', + 'ezcGraphStackedBarsRenderer' => 'Graph/interfaces/stacked_bar_renderer.php', 'ezcGraphAxisLabelRenderer' => 'Graph/interfaces/axis_label_renderer.php', + 'ezcGraphBarChart' => 'Graph/charts/bar.php', 'ezcGraphChartDataContainer' => 'Graph/data_container/base.php', 'ezcGraphChartElementAxis' => 'Graph/element/axis.php', 'ezcGraphColor' => 'Graph/colors/color.php', @@ -50,13 +56,10 @@ return array( 'ezcGraphDataSetProperty' => 'Graph/interfaces/dataset_property.php', 'ezcGraphDriver' => 'Graph/interfaces/driver.php', 'ezcGraphDriverOptions' => 'Graph/options/driver.php', - 'ezcGraphLineChart' => 'Graph/charts/line.php', - 'ezcGraphOdometerRenderer' => 'Graph/interfaces/odometer_renderer.php', + 'ezcGraphHorizontalBarRenderer' => 'Graph/interfaces/horizontal_bar_renderer.php', 'ezcGraphPalette' => 'Graph/interfaces/palette.php', - 'ezcGraphRadarRenderer' => 'Graph/interfaces/radar_renderer.php', - 'ezcGraphRenderer' => 'Graph/interfaces/renderer.php', + 'ezcGraphRenderer2d' => 'Graph/renderer/2d.php', 'ezcGraphRendererOptions' => 'Graph/options/renderer.php', - 'ezcGraphStackedBarsRenderer' => 'Graph/interfaces/stacked_bar_renderer.php', 'ezcGraphTransformation' => 'Graph/math/transformation.php', 'ezcGraph' => 'Graph/graph.php', 'ezcGraphArrayDataSet' => 'Graph/datasets/array.php', @@ -68,7 +71,6 @@ return array( 'ezcGraphAxisRadarLabelRenderer' => 'Graph/renderer/axis_label_radar.php', 'ezcGraphAxisRotatedLabelRenderer' => 'Graph/renderer/axis_label_rotated.php', 'ezcGraphAxisStep' => 'Graph/structs/step.php', - 'ezcGraphBarChart' => 'Graph/charts/bar.php', 'ezcGraphBoundings' => 'Graph/math/boundings.php', 'ezcGraphCairoDriver' => 'Graph/driver/cairo.php', 'ezcGraphCairoDriverOptions' => 'Graph/options/cairo_driver.php', @@ -92,6 +94,8 @@ return array( 'ezcGraphFontOptions' => 'Graph/options/font.php', 'ezcGraphGdDriver' => 'Graph/driver/gd.php', 'ezcGraphGdDriverOptions' => 'Graph/options/gd_driver.php', + 'ezcGraphHorizontalBarChart' => 'Graph/charts/horizontal_bar.php', + 'ezcGraphHorizontalRenderer' => 'Graph/renderer/horizontal_bar.php', 'ezcGraphLineChartOptions' => 'Graph/options/line_chart.php', 'ezcGraphLinearGradient' => 'Graph/colors/linear_gradient.php', 'ezcGraphNumericDataSet' => 'Graph/datasets/numeric.php', @@ -109,7 +113,6 @@ return array( 'ezcGraphRadarChart' => 'Graph/charts/radar.php', 'ezcGraphRadarChartOptions' => 'Graph/options/radar_chart.php', 'ezcGraphRadialGradient' => 'Graph/colors/radial_gradient.php', - 'ezcGraphRenderer2d' => 'Graph/renderer/2d.php', 'ezcGraphRenderer2dOptions' => 'Graph/options/renderer_2d.php', 'ezcGraphRenderer3d' => 'Graph/renderer/3d.php', 'ezcGraphRenderer3dOptions' => 'Graph/options/renderer_3d.php', diff --git a/src/interfaces/horizontal_bar_renderer.php b/src/interfaces/horizontal_bar_renderer.php new file mode 100644 index 0000000..e6e937f --- /dev/null +++ b/src/interfaces/horizontal_bar_renderer.php @@ -0,0 +1,48 @@ +<?php +/** + * File containing the ezcGraphHorizontalBarRenderer interface + * + * @package Graph + * @version //autogentag// + * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved. + * @license http://ez.no/licenses/new_bsd New BSD License + */ +/** + * Interface which adds the methods reqired to render horizontal bar charts to + * the renderer. + * + * @version //autogentag// + * @package Graph + */ +interface ezcGraphHorizontalBarRenderer +{ + /** + * Draw horizontal bar + * + * Draws a horizontal bar as a data element in a line chart + * + * @param ezcGraphBoundings $boundings Chart boundings + * @param ezcGraphContext $context Context of call + * @param ezcGraphColor $color Color of line + * @param ezcGraphCoordinate $position Position of data point + * @param float $stepSize Space which can be used for bars + * @param int $dataNumber Number of dataset + * @param int $dataCount Count of datasets in chart + * @param int $symbol Symbol to draw for line + * @param float $axisPosition Position of axis for drawing filled lines + * @return void + */ + public function drawHorizontalBar( + ezcGraphBoundings $boundings, + ezcGraphContext $context, + ezcGraphColor $color, + ezcGraphCoordinate $position, + $stepSize, + $dataNumber = 1, + $dataCount = 1, + $symbol = ezcGraph::NO_SYMBOL, + $axisPosition = 0. + ); +} + +?> diff --git a/src/renderer/horizontal_bar.php b/src/renderer/horizontal_bar.php new file mode 100644 index 0000000..7448741 --- /dev/null +++ b/src/renderer/horizontal_bar.php @@ -0,0 +1,177 @@ +<?php +/** + * File containing the two dimensional renderer + * + * @package Graph + * @version //autogentag// + * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved. + * @license http://ez.no/licenses/new_bsd New BSD License + */ +/** + * Class to transform horizontal bar charts primitives into image primitives. + * Renders charts in a two dimensional view. + * + * The class options are defined in the class {@link ezcGraphRenderer2dOptions} + * extending the basic renderer options in {@link ezcGraphRendererOptions}. + * + * <code> + * @TODO: Add example + * </code> + * + * @version //autogentag// + * @package Graph + * @mainclass + */ +class ezcGraphHorizontalRenderer + extends + ezcGraphRenderer2d + implements + ezcGraphHorizontalBarRenderer +{ + /** + * Draw horizontal bar + * + * Draws a horizontal bar as a data element in a line chart + * + * @param ezcGraphBoundings $boundings Chart boundings + * @param ezcGraphContext $context Context of call + * @param ezcGraphColor $color Color of line + * @param ezcGraphCoordinate $position Position of data point + * @param float $stepSize Space which can be used for bars + * @param int $dataNumber Number of dataset + * @param int $dataCount Count of datasets in chart + * @param int $symbol Symbol to draw for line + * @param float $axisPosition Position of axis for drawing filled lines + * @return void + */ + public function drawHorizontalBar( + ezcGraphBoundings $boundings, + ezcGraphContext $context, + ezcGraphColor $color, + ezcGraphCoordinate $position, + $stepSize, + $dataNumber = 1, + $dataCount = 1, + $symbol = ezcGraph::NO_SYMBOL, + $axisPosition = 0. ) + { + // Apply margin + $margin = $stepSize * $this->options->barMargin; + $padding = $stepSize * $this->options->barPadding; + $barHeight = ( $stepSize - $margin ) / $dataCount - $padding; + $offset = - $stepSize / 2 + $margin / 2 + ( $dataCount - $dataNumber - 1 ) * ( $padding + $barHeight ) + $padding / 2; + + $barPointArray = array( + new ezcGraphCoordinate( + $boundings->x0 + ( $boundings->width ) * $axisPosition, + $boundings->y0 + ( $boundings->height ) * $position->y + $offset + ), + new ezcGraphCoordinate( + $boundings->x0 + ( $boundings->width ) * $position->x, + $boundings->y0 + ( $boundings->height ) * $position->y + $offset + ), + new ezcGraphCoordinate( + $boundings->x0 + ( $boundings->width ) * $position->x, + $boundings->y0 + ( $boundings->height ) * $position->y + $offset + $barHeight + ), + new ezcGraphCoordinate( + $boundings->x0 + ( $boundings->width ) * $axisPosition, + $boundings->y0 + ( $boundings->height ) * $position->y + $offset + $barHeight + ), + ); + + $this->addElementReference( + $context, + $this->driver->drawPolygon( + $barPointArray, + $color, + true + ) + ); + + if ( $this->options->dataBorder > 0 ) + { + $darkened = $color->darken( $this->options->dataBorder ); + $this->driver->drawPolygon( + $barPointArray, + $darkened, + false, + 1 + ); + } + } + + /** + * Draw bar + * + * Draws a bar as a data element in a line chart + * + * @param ezcGraphBoundings $boundings Chart boundings + * @param ezcGraphContext $context Context of call + * @param ezcGraphColor $color Color of line + * @param ezcGraphCoordinate $position Position of data point + * @param float $stepSize Space which can be used for bars + * @param int $dataNumber Number of dataset + * @param int $dataCount Count of datasets in chart + * @param int $symbol Symbol to draw for line + * @param float $axisPosition Position of axis for drawing filled lines + * @return void + */ + public function drawBar( + ezcGraphBoundings $boundings, + ezcGraphContext $context, + ezcGraphColor $color, + ezcGraphCoordinate $position, + $stepSize, + $dataNumber = 1, + $dataCount = 1, + $symbol = ezcGraph::NO_SYMBOL, + $axisPosition = 0. ) + { + throw new ezcBaseFunctionalityNotSupportedException( + "A normal bar chart", + "Only horizontal bar charts can be renderered with the ezcGraphHorizontalRenderer" + ); + } + + /** + * Draw data line + * + * Draws a line as a data element in a line chart + * + * @param ezcGraphBoundings $boundings Chart boundings + * @param ezcGraphContext $context Context of call + * @param ezcGraphColor $color Color of line + * @param ezcGraphCoordinate $start Starting point + * @param ezcGraphCoordinate $end Ending point + * @param int $dataNumber Number of dataset + * @param int $dataCount Count of datasets in chart + * @param int $symbol Symbol to draw for line + * @param ezcGraphColor $symbolColor Color of the symbol, defaults to linecolor + * @param ezcGraphColor $fillColor Color to fill line with + * @param float $axisPosition Position of axis for drawing filled lines + * @param float $thickness Line thickness + * @return void + */ + public function drawDataLine( + ezcGraphBoundings $boundings, + ezcGraphContext $context, + ezcGraphColor $color, + ezcGraphCoordinate $start, + ezcGraphCoordinate $end, + $dataNumber = 1, + $dataCount = 1, + $symbol = ezcGraph::NO_SYMBOL, + ezcGraphColor $symbolColor = null, + ezcGraphColor $fillColor = null, + $axisPosition = 0., + $thickness = 1. ) + { + throw new ezcBaseFunctionalityNotSupportedException( + "A normal line chart", + "Only horizontal bar charts can be renderered with the ezcGraphHorizontalRenderer" + ); + } +} + +?> diff --git a/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderBasicHorizontalBarChart.svg b/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderBasicHorizontalBarChart.svg new file mode 100644 index 0000000..ef3b7c3 --- /dev/null +++ b/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderBasicHorizontalBarChart.svg @@ -0,0 +1,2 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" width="500" height="200" version="1.0" id="ezcGraph"><defs/><g id="ezcGraphChart" color-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="optimizeLegibility"><path d=" M 0.0000,200.0000 L 0.0000,0.0000 L 500.0000,0.0000 L 500.0000,200.0000 L 0.0000,200.0000 z " style="fill: #eeeeec; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_1"/><path d=" M 0.0000,200.0000 L 0.0000,0.0000 L 100.0000,0.0000 L 100.0000,200.0000 L 0.0000,200.0000 z " style="fill: #000000; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_2"/><path d=" M 2.0000,16.0000 L 2.0000,2.0000 L 16.0000,2.0000 L 16.0000,16.0000 L 2.0000,16.0000 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_3"/><path d=" M 100.0000,180.0000 L 500.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_5"/><path d=" M 492.0000,176.0000 L 500.0000,180.0000 L 492.0000,184.0000 L 492.0000,176.0000 z " style="fill: #2e3436; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_6"/><path d=" M 160.0000,20.0000 L 160.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_7"/><path d=" M 160.0000,179.0000 L 160.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_8"/><path d=" M 180.0000,20.0000 L 180.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_9"/><path d=" M 180.0000,179.0000 L 180.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_10"/><path d=" M 200.0000,20.0000 L 200.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_11"/><path d=" M 200.0000,179.0000 L 200.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_12"/><path d=" M 220.0000,20.0000 L 220.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_13"/><path d=" M 220.0000,177.0000 L 220.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_14"/><path d=" M 240.0000,20.0000 L 240.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_16"/><path d=" M 240.0000,179.0000 L 240.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_17"/><path d=" M 260.0000,20.0000 L 260.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_18"/><path d=" M 260.0000,179.0000 L 260.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_19"/><path d=" M 280.0000,20.0000 L 280.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_20"/><path d=" M 280.0000,179.0000 L 280.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_21"/><path d=" M 300.0000,20.0000 L 300.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_22"/><path d=" M 300.0000,177.0000 L 300.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_23"/><path d=" M 320.0000,20.0000 L 320.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_25"/><path d=" M 320.0000,179.0000 L 320.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_26"/><path d=" M 340.0000,20.0000 L 340.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_27"/><path d=" M 340.0000,179.0000 L 340.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_28"/><path d=" M 360.0000,20.0000 L 360.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_29"/><path d=" M 360.0000,179.0000 L 360.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_30"/><path d=" M 380.0000,20.0000 L 380.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_31"/><path d=" M 380.0000,177.0000 L 380.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_32"/><path d=" M 400.0000,20.0000 L 400.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_34"/><path d=" M 400.0000,179.0000 L 400.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_35"/><path d=" M 420.0000,20.0000 L 420.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_36"/><path d=" M 420.0000,179.0000 L 420.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_37"/><path d=" M 440.0000,20.0000 L 440.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_38"/><path d=" M 440.0000,179.0000 L 440.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_39"/><path d=" M 460.0000,20.0000 L 460.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_40"/><path d=" M 460.0000,177.0000 L 460.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_41"/><path d=" M 140.0000,200.0000 L 140.0000,0.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_43"/><path d=" M 137.5000,5.0000 L 140.0000,0.0000 L 142.5000,5.0000 L 137.5000,5.0000 z " style="fill: #2e3436; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_44"/><path d=" M 140.0000,148.0000 L 460.0000,148.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_46"/><path d=" M 137.0000,148.0000 L 143.0000,148.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_47"/><path d=" M 140.0000,116.0000 L 460.0000,116.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_49"/><path d=" M 137.0000,116.0000 L 143.0000,116.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_50"/><path d=" M 140.0000,84.0000 L 460.0000,84.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_52"/><path d=" M 137.0000,84.0000 L 143.0000,84.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_53"/><path d=" M 140.0000,52.0000 L 460.0000,52.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_55"/><path d=" M 137.0000,52.0000 L 143.0000,52.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_56"/><path d=" M 140.0000,20.0000 L 460.0000,20.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_58"/><path d=" M 137.0000,20.0000 L 143.0000,20.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_59"/><path d=" M 140.0000,49.6425 L 140.0000,22.3575 L 327.2000,22.3575 L 327.2000,49.6425 L 140.0000,49.6425 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_60"/><path d=" M 140.5000,22.8575 L 326.7000,22.8575 L 326.7000,49.1425 L 140.5000,49.1425 L 140.5000,22.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_61"/><path d=" M 140.0000,81.6425 L 140.0000,54.3575 L 260.8000,54.3575 L 260.8000,81.6425 L 140.0000,81.6425 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_62"/><path d=" M 140.5000,54.8575 L 260.3000,54.8575 L 260.3000,81.1425 L 140.5000,81.1425 L 140.5000,54.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_63"/><path d=" M 140.0000,113.6425 L 140.0000,86.3575 L 399.2000,86.3575 L 399.2000,113.6425 L 140.0000,113.6425 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_64"/><path d=" M 140.5000,86.8575 L 398.7000,86.8575 L 398.7000,113.1425 L 140.5000,113.1425 L 140.5000,86.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_65"/><path d=" M 140.0000,145.6425 L 140.0000,118.3575 L 236.0000,118.3575 L 236.0000,145.6425 L 140.0000,145.6425 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_66"/><path d=" M 140.5000,118.8575 L 235.5000,118.8575 L 235.5000,145.1425 L 140.5000,145.1425 L 140.5000,118.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_67"/><path d=" M 140.0000,177.6425 L 140.0000,150.3575 L 140.8000,150.3575 L 140.8000,177.6425 L 140.0000,177.6425 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_68"/><path d=" M 140.5000,150.8575 L 140.3000,150.8575 L 140.3000,177.1425 L 140.5000,177.1425 L 140.5000,150.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_69"/><g id="ezcGraphTextBox_4"><path d=" M 16.5000,17.0000 L 16.5000,1.5000 L 55.1000,1.5000 L 55.1000,17.0000 L 16.5000,17.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_70"/><text id="ezcGraphTextBox_4_text" x="17.0000" text-length="37.1000px" y="13.9000" style="font-size: 14px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">Set 1</text></g><g id="ezcGraphTextBox_15"><path d=" M 209.2700,194.0000 L 209.2700,181.5000 L 231.2300,181.5000 L 231.2300,194.0000 L 209.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_71"/><text id="ezcGraphTextBox_15_text" x="209.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">100</text></g><g id="ezcGraphTextBox_24"><path d=" M 289.2700,194.0000 L 289.2700,181.5000 L 311.2300,181.5000 L 311.2300,194.0000 L 289.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_72"/><text id="ezcGraphTextBox_24_text" x="289.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">200</text></g><g id="ezcGraphTextBox_33"><path d=" M 369.2700,194.0000 L 369.2700,181.5000 L 391.2300,181.5000 L 391.2300,194.0000 L 369.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_73"/><text id="ezcGraphTextBox_33_text" x="369.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">300</text></g><g id="ezcGraphTextBox_42"><path d=" M 449.2700,194.0000 L 449.2700,181.5000 L 471.2300,181.5000 L 471.2300,194.0000 L 449.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_74"/><text id="ezcGraphTextBox_42_text" x="449.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">400</text></g><g id="ezcGraphTextBox_45"><path d=" M 102.5200,176.0500 L 102.5200,152.4500 L 139.0000,152.4500 L 139.0000,176.0500 L 102.5200,176.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_75"/><text id="ezcGraphTextBox_45_text" x="103.0200" text-length="34.9800px" y="162.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_45_text" x="131.1800" text-length="6.8200px" y="174.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">5</text></g><g id="ezcGraphTextBox_48"><path d=" M 102.5200,144.0500 L 102.5200,120.4500 L 139.0000,120.4500 L 139.0000,144.0500 L 102.5200,144.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_76"/><text id="ezcGraphTextBox_48_text" x="103.0200" text-length="34.9800px" y="130.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_48_text" x="131.1800" text-length="6.8200px" y="142.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">4</text></g><g id="ezcGraphTextBox_51"><path d=" M 102.5200,112.0500 L 102.5200,88.4500 L 139.0000,88.4500 L 139.0000,112.0500 L 102.5200,112.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_77"/><text id="ezcGraphTextBox_51_text" x="103.0200" text-length="34.9800px" y="98.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_51_text" x="131.1800" text-length="6.8200px" y="110.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">3</text></g><g id="ezcGraphTextBox_54"><path d=" M 102.5200,80.0500 L 102.5200,56.4500 L 139.0000,56.4500 L 139.0000,80.0500 L 102.5200,80.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_78"/><text id="ezcGraphTextBox_54_text" x="103.0200" text-length="34.9800px" y="66.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_54_text" x="131.1800" text-length="6.8200px" y="78.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">2</text></g><g id="ezcGraphTextBox_57"><path d=" M 102.5200,48.0500 L 102.5200,24.4500 L 139.0000,24.4500 L 139.0000,48.0500 L 102.5200,48.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_79"/><text id="ezcGraphTextBox_57_text" x="103.0200" text-length="34.9800px" y="34.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_57_text" x="131.1800" text-length="6.8200px" y="46.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">1</text></g></g></svg> diff --git a/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartMultipleBars.svg b/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartMultipleBars.svg new file mode 100644 index 0000000..38465f8 --- /dev/null +++ b/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartMultipleBars.svg @@ -0,0 +1,2 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" width="500" height="200" version="1.0" id="ezcGraph"><defs/><g id="ezcGraphChart" color-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="optimizeLegibility"><path d=" M 0.0000,200.0000 L 0.0000,0.0000 L 500.0000,0.0000 L 500.0000,200.0000 L 0.0000,200.0000 z " style="fill: #eeeeec; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_1"/><path d=" M 0.0000,200.0000 L 0.0000,0.0000 L 100.0000,0.0000 L 100.0000,200.0000 L 0.0000,200.0000 z " style="fill: #000000; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_2"/><path d=" M 2.0000,16.0000 L 2.0000,2.0000 L 16.0000,2.0000 L 16.0000,16.0000 L 2.0000,16.0000 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_3"/><path d=" M 2.0000,34.0000 L 2.0000,20.0000 L 16.0000,20.0000 L 16.0000,34.0000 L 2.0000,34.0000 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_5"/><path d=" M 100.0000,180.0000 L 500.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_7"/><path d=" M 492.0000,176.0000 L 500.0000,180.0000 L 492.0000,184.0000 L 492.0000,176.0000 z " style="fill: #2e3436; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_8"/><path d=" M 161.3333,20.0000 L 161.3333,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_9"/><path d=" M 161.3333,179.0000 L 161.3333,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_10"/><path d=" M 182.6667,20.0000 L 182.6667,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_11"/><path d=" M 182.6667,179.0000 L 182.6667,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_12"/><path d=" M 204.0000,20.0000 L 204.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_13"/><path d=" M 204.0000,179.0000 L 204.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_14"/><path d=" M 225.3333,20.0000 L 225.3333,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_15"/><path d=" M 225.3333,179.0000 L 225.3333,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_16"/><path d=" M 246.6667,20.0000 L 246.6667,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_17"/><path d=" M 246.6667,177.0000 L 246.6667,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_18"/><path d=" M 268.0000,20.0000 L 268.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_20"/><path d=" M 268.0000,179.0000 L 268.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_21"/><path d=" M 289.3333,20.0000 L 289.3333,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_22"/><path d=" M 289.3333,179.0000 L 289.3333,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_23"/><path d=" M 310.6667,20.0000 L 310.6667,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_24"/><path d=" M 310.6667,179.0000 L 310.6667,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_25"/><path d=" M 332.0000,20.0000 L 332.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_26"/><path d=" M 332.0000,179.0000 L 332.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_27"/><path d=" M 353.3333,20.0000 L 353.3333,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_28"/><path d=" M 353.3333,177.0000 L 353.3333,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_29"/><path d=" M 374.6667,20.0000 L 374.6667,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_31"/><path d=" M 374.6667,179.0000 L 374.6667,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_32"/><path d=" M 396.0000,20.0000 L 396.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_33"/><path d=" M 396.0000,179.0000 L 396.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_34"/><path d=" M 417.3333,20.0000 L 417.3333,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_35"/><path d=" M 417.3333,179.0000 L 417.3333,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_36"/><path d=" M 438.6667,20.0000 L 438.6667,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_37"/><path d=" M 438.6667,179.0000 L 438.6667,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_38"/><path d=" M 460.0000,20.0000 L 460.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_39"/><path d=" M 460.0000,177.0000 L 460.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_40"/><path d=" M 140.0000,200.0000 L 140.0000,0.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_42"/><path d=" M 137.5000,5.0000 L 140.0000,0.0000 L 142.5000,5.0000 L 137.5000,5.0000 z " style="fill: #2e3436; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_43"/><path d=" M 140.0000,148.0000 L 460.0000,148.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_45"/><path d=" M 137.0000,148.0000 L 143.0000,148.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_46"/><path d=" M 140.0000,116.0000 L 460.0000,116.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_48"/><path d=" M 137.0000,116.0000 L 143.0000,116.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_49"/><path d=" M 140.0000,84.0000 L 460.0000,84.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_51"/><path d=" M 137.0000,84.0000 L 143.0000,84.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_52"/><path d=" M 140.0000,52.0000 L 460.0000,52.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_54"/><path d=" M 137.0000,52.0000 L 143.0000,52.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_55"/><path d=" M 140.0000,20.0000 L 460.0000,20.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_57"/><path d=" M 137.0000,20.0000 L 143.0000,20.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_58"/><path d=" M 140.0000,35.1975 L 140.0000,22.3575 L 239.8400,22.3575 L 239.8400,35.1975 L 140.0000,35.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_59"/><path d=" M 140.5000,22.8575 L 239.3400,22.8575 L 239.3400,34.6975 L 140.5000,34.6975 L 140.5000,22.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_60"/><path d=" M 140.0000,67.1975 L 140.0000,54.3575 L 204.4267,54.3575 L 204.4267,67.1975 L 140.0000,67.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_61"/><path d=" M 140.5000,54.8575 L 203.9267,54.8575 L 203.9267,66.6975 L 140.5000,66.6975 L 140.5000,54.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_62"/><path d=" M 140.0000,99.1975 L 140.0000,86.3575 L 278.2400,86.3575 L 278.2400,99.1975 L 140.0000,99.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_63"/><path d=" M 140.5000,86.8575 L 277.7400,86.8575 L 277.7400,98.6975 L 140.5000,98.6975 L 140.5000,86.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_64"/><path d=" M 140.0000,131.1975 L 140.0000,118.3575 L 191.2000,118.3575 L 191.2000,131.1975 L 140.0000,131.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_65"/><path d=" M 140.5000,118.8575 L 190.7000,118.8575 L 190.7000,130.6975 L 140.5000,130.6975 L 140.5000,118.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_66"/><path d=" M 140.0000,163.1975 L 140.0000,150.3575 L 140.4267,150.3575 L 140.4267,163.1975 L 140.0000,163.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_67"/><path d=" M 140.0000,49.6425 L 140.0000,36.8025 L 371.6800,36.8025 L 371.6800,49.6425 L 140.0000,49.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_68"/><path d=" M 140.5000,37.3025 L 371.1800,37.3025 L 371.1800,49.1425 L 140.5000,49.1425 L 140.5000,37.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_69"/><path d=" M 140.0000,81.6425 L 140.0000,68.8025 L 239.8400,68.8025 L 239.8400,81.6425 L 140.0000,81.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_70"/><path d=" M 140.5000,69.3025 L 239.3400,69.3025 L 239.3400,81.1425 L 140.5000,81.1425 L 140.5000,69.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_71"/><path d=" M 140.0000,113.6425 L 140.0000,100.8025 L 267.1467,100.8025 L 267.1467,113.6425 L 140.0000,113.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_72"/><path d=" M 140.5000,101.3025 L 266.6467,101.3025 L 266.6467,113.1425 L 140.5000,113.1425 L 140.5000,101.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_73"/><path d=" M 140.0000,145.6425 L 140.0000,132.8025 L 142.1333,132.8025 L 142.1333,145.6425 L 140.0000,145.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_74"/><path d=" M 140.5000,133.3025 L 141.6333,133.3025 L 141.6333,145.1425 L 140.5000,145.1425 L 140.5000,133.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_75"/><path d=" M 140.0000,177.6425 L 140.0000,164.8025 L 192.9067,164.8025 L 192.9067,177.6425 L 140.0000,177.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_76"/><path d=" M 140.5000,165.3025 L 192.4067,165.3025 L 192.4067,177.1425 L 140.5000,177.1425 L 140.5000,165.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_77"/><g id="ezcGraphTextBox_4"><path d=" M 16.5000,17.0000 L 16.5000,1.5000 L 55.1000,1.5000 L 55.1000,17.0000 L 16.5000,17.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_78"/><text id="ezcGraphTextBox_4_text" x="17.0000" text-length="37.1000px" y="13.9000" style="font-size: 14px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">Set 1</text></g><g id="ezcGraphTextBox_6"><path d=" M 16.5000,35.0000 L 16.5000,19.5000 L 55.1000,19.5000 L 55.1000,35.0000 L 16.5000,35.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_79"/><text id="ezcGraphTextBox_6_text" x="17.0000" text-length="37.1000px" y="31.9000" style="font-size: 14px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">Set 2</text></g><g id="ezcGraphTextBox_19"><path d=" M 235.9367,194.0000 L 235.9367,181.5000 L 257.8967,181.5000 L 257.8967,194.0000 L 235.9367,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_80"/><text id="ezcGraphTextBox_19_text" x="236.4367" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">250</text></g><g id="ezcGraphTextBox_30"><path d=" M 342.6033,194.0000 L 342.6033,181.5000 L 364.5633,181.5000 L 364.5633,194.0000 L 342.6033,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_81"/><text id="ezcGraphTextBox_30_text" x="343.1033" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">500</text></g><g id="ezcGraphTextBox_41"><path d=" M 449.2700,194.0000 L 449.2700,181.5000 L 471.2300,181.5000 L 471.2300,194.0000 L 449.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_82"/><text id="ezcGraphTextBox_41_text" x="449.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">750</text></g><g id="ezcGraphTextBox_44"><path d=" M 102.5200,176.0500 L 102.5200,152.4500 L 139.0000,152.4500 L 139.0000,176.0500 L 102.5200,176.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_83"/><text id="ezcGraphTextBox_44_text" x="103.0200" text-length="34.9800px" y="162.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_44_text" x="131.1800" text-length="6.8200px" y="174.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">5</text></g><g id="ezcGraphTextBox_47"><path d=" M 102.5200,144.0500 L 102.5200,120.4500 L 139.0000,120.4500 L 139.0000,144.0500 L 102.5200,144.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_84"/><text id="ezcGraphTextBox_47_text" x="103.0200" text-length="34.9800px" y="130.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_47_text" x="131.1800" text-length="6.8200px" y="142.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">4</text></g><g id="ezcGraphTextBox_50"><path d=" M 102.5200,112.0500 L 102.5200,88.4500 L 139.0000,88.4500 L 139.0000,112.0500 L 102.5200,112.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_85"/><text id="ezcGraphTextBox_50_text" x="103.0200" text-length="34.9800px" y="98.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_50_text" x="131.1800" text-length="6.8200px" y="110.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">3</text></g><g id="ezcGraphTextBox_53"><path d=" M 102.5200,80.0500 L 102.5200,56.4500 L 139.0000,56.4500 L 139.0000,80.0500 L 102.5200,80.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_86"/><text id="ezcGraphTextBox_53_text" x="103.0200" text-length="34.9800px" y="66.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_53_text" x="131.1800" text-length="6.8200px" y="78.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">2</text></g><g id="ezcGraphTextBox_56"><path d=" M 102.5200,48.0500 L 102.5200,24.4500 L 139.0000,24.4500 L 139.0000,48.0500 L 102.5200,48.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_87"/><text id="ezcGraphTextBox_56_text" x="103.0200" text-length="34.9800px" y="34.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_56_text" x="131.1800" text-length="6.8200px" y="46.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">1</text></g></g></svg> diff --git a/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartNegativeValues.svg b/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartNegativeValues.svg new file mode 100644 index 0000000..8101a82 --- /dev/null +++ b/tests/data/compare/ezcGraphHorizontalBarRendererTests_testRenderHorizontalBarChartNegativeValues.svg @@ -0,0 +1,2 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" width="500" height="200" version="1.0" id="ezcGraph"><defs/><g id="ezcGraphChart" color-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="optimizeLegibility"><path d=" M 0.0000,200.0000 L 0.0000,0.0000 L 500.0000,0.0000 L 500.0000,200.0000 L 0.0000,200.0000 z " style="fill: #eeeeec; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_1"/><path d=" M 0.0000,200.0000 L 0.0000,0.0000 L 100.0000,0.0000 L 100.0000,200.0000 L 0.0000,200.0000 z " style="fill: #000000; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_2"/><path d=" M 2.0000,16.0000 L 2.0000,2.0000 L 16.0000,2.0000 L 16.0000,16.0000 L 2.0000,16.0000 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_3"/><path d=" M 2.0000,34.0000 L 2.0000,20.0000 L 16.0000,20.0000 L 16.0000,34.0000 L 2.0000,34.0000 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_5"/><path d=" M 100.0000,180.0000 L 500.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_7"/><path d=" M 492.0000,176.0000 L 500.0000,180.0000 L 492.0000,184.0000 L 492.0000,176.0000 z " style="fill: #2e3436; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_8"/><path d=" M 140.0000,20.0000 L 140.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_9"/><path d=" M 140.0000,177.0000 L 140.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_10"/><path d=" M 152.8000,20.0000 L 152.8000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_12"/><path d=" M 152.8000,179.0000 L 152.8000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_13"/><path d=" M 165.6000,20.0000 L 165.6000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_14"/><path d=" M 165.6000,179.0000 L 165.6000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_15"/><path d=" M 178.4000,20.0000 L 178.4000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_16"/><path d=" M 178.4000,179.0000 L 178.4000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_17"/><path d=" M 191.2000,20.0000 L 191.2000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_18"/><path d=" M 191.2000,179.0000 L 191.2000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_19"/><path d=" M 204.0000,20.0000 L 204.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_20"/><path d=" M 204.0000,177.0000 L 204.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_21"/><path d=" M 216.8000,20.0000 L 216.8000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_23"/><path d=" M 216.8000,179.0000 L 216.8000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_24"/><path d=" M 229.6000,20.0000 L 229.6000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_25"/><path d=" M 229.6000,179.0000 L 229.6000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_26"/><path d=" M 242.4000,20.0000 L 242.4000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_27"/><path d=" M 242.4000,179.0000 L 242.4000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_28"/><path d=" M 255.2000,20.0000 L 255.2000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_29"/><path d=" M 255.2000,179.0000 L 255.2000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_30"/><path d=" M 280.8000,20.0000 L 280.8000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_31"/><path d=" M 280.8000,179.0000 L 280.8000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_32"/><path d=" M 293.6000,20.0000 L 293.6000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_33"/><path d=" M 293.6000,179.0000 L 293.6000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_34"/><path d=" M 306.4000,20.0000 L 306.4000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_35"/><path d=" M 306.4000,179.0000 L 306.4000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_36"/><path d=" M 319.2000,20.0000 L 319.2000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_37"/><path d=" M 319.2000,179.0000 L 319.2000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_38"/><path d=" M 332.0000,20.0000 L 332.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_39"/><path d=" M 332.0000,177.0000 L 332.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_40"/><path d=" M 344.8000,20.0000 L 344.8000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_42"/><path d=" M 344.8000,179.0000 L 344.8000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_43"/><path d=" M 357.6000,20.0000 L 357.6000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_44"/><path d=" M 357.6000,179.0000 L 357.6000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_45"/><path d=" M 370.4000,20.0000 L 370.4000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_46"/><path d=" M 370.4000,179.0000 L 370.4000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_47"/><path d=" M 383.2000,20.0000 L 383.2000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_48"/><path d=" M 383.2000,179.0000 L 383.2000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_49"/><path d=" M 396.0000,20.0000 L 396.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_50"/><path d=" M 396.0000,177.0000 L 396.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_51"/><path d=" M 408.8000,20.0000 L 408.8000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_53"/><path d=" M 408.8000,179.0000 L 408.8000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_54"/><path d=" M 421.6000,20.0000 L 421.6000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_55"/><path d=" M 421.6000,179.0000 L 421.6000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_56"/><path d=" M 434.4000,20.0000 L 434.4000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_57"/><path d=" M 434.4000,179.0000 L 434.4000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_58"/><path d=" M 447.2000,20.0000 L 447.2000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_59"/><path d=" M 447.2000,179.0000 L 447.2000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_60"/><path d=" M 460.0000,20.0000 L 460.0000,180.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_61"/><path d=" M 460.0000,177.0000 L 460.0000,180.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_62"/><path d=" M 268.0000,200.0000 L 268.0000,0.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_64"/><path d=" M 265.5000,5.0000 L 268.0000,0.0000 L 270.5000,5.0000 L 265.5000,5.0000 z " style="fill: #2e3436; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_65"/><path d=" M 140.0000,148.0000 L 460.0000,148.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_67"/><path d=" M 265.0000,148.0000 L 271.0000,148.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_68"/><path d=" M 140.0000,116.0000 L 460.0000,116.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_70"/><path d=" M 265.0000,116.0000 L 271.0000,116.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_71"/><path d=" M 140.0000,84.0000 L 460.0000,84.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_73"/><path d=" M 265.0000,84.0000 L 271.0000,84.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_74"/><path d=" M 140.0000,52.0000 L 460.0000,52.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_76"/><path d=" M 265.0000,52.0000 L 271.0000,52.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_77"/><path d=" M 140.0000,20.0000 L 460.0000,20.0000" style="fill: none; stroke: #000000; stroke-width: 1; stroke-opacity: 0.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_79"/><path d=" M 265.0000,20.0000 L 271.0000,20.0000" style="fill: none; stroke: #2e3436; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphLine_80"/><path d=" M 268.0000,35.1975 L 268.0000,22.3575 L 327.9040,22.3575 L 327.9040,35.1975 L 268.0000,35.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_81"/><path d=" M 268.5000,22.8575 L 327.4040,22.8575 L 327.4040,34.6975 L 268.5000,34.6975 L 268.5000,22.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_82"/><path d=" M 268.0000,67.1975 L 268.0000,54.3575 L 229.3440,54.3575 L 229.3440,67.1975 L 268.0000,67.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_83"/><path d=" M 267.5000,54.8575 L 229.8440,54.8575 L 229.8440,66.6975 L 267.5000,66.6975 L 267.5000,54.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_84"/><path d=" M 268.0000,99.1975 L 268.0000,86.3575 L 185.0560,86.3575 L 185.0560,99.1975 L 268.0000,99.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_85"/><path d=" M 267.5000,86.8575 L 185.5560,86.8575 L 185.5560,98.6975 L 267.5000,98.6975 L 267.5000,86.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_86"/><path d=" M 268.0000,131.1975 L 268.0000,118.3575 L 298.7200,118.3575 L 298.7200,131.1975 L 268.0000,131.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_87"/><path d=" M 268.5000,118.8575 L 298.2200,118.8575 L 298.2200,130.6975 L 268.5000,130.6975 L 268.5000,118.8575 z " style="fill: none; stroke: #1a3352; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_88"/><path d=" M 268.0000,163.1975 L 268.0000,150.3575 L 268.2560,150.3575 L 268.2560,163.1975 L 268.0000,163.1975 z " style="fill: #3465a4; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_89"/><path d=" M 268.0000,49.6425 L 268.0000,36.8025 L 407.0080,36.8025 L 407.0080,49.6425 L 268.0000,49.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_90"/><path d=" M 268.5000,37.3025 L 406.5080,37.3025 L 406.5080,49.1425 L 268.5000,49.1425 L 268.5000,37.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_91"/><path d=" M 268.0000,81.6425 L 268.0000,68.8025 L 327.9040,68.8025 L 327.9040,81.6425 L 268.0000,81.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_92"/><path d=" M 268.5000,69.3025 L 327.4040,69.3025 L 327.4040,81.1425 L 268.5000,81.1425 L 268.5000,69.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_93"/><path d=" M 268.0000,113.6425 L 268.0000,100.8025 L 191.7120,100.8025 L 191.7120,113.6425 L 268.0000,113.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_94"/><path d=" M 267.5000,101.3025 L 192.2120,101.3025 L 192.2120,113.1425 L 267.5000,113.1425 L 267.5000,101.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_95"/><path d=" M 268.0000,145.6425 L 268.0000,132.8025 L 269.2800,132.8025 L 269.2800,145.6425 L 268.0000,145.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_96"/><path d=" M 268.5000,133.3025 L 268.7800,133.3025 L 268.7800,145.1425 L 268.5000,145.1425 L 268.5000,133.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_97"/><path d=" M 268.0000,177.6425 L 268.0000,164.8025 L 236.2560,164.8025 L 236.2560,177.6425 L 268.0000,177.6425 z " style="fill: #4e9a06; fill-opacity: 1.00; stroke: none;" id="ezcGraphPolygon_98"/><path d=" M 267.5000,165.3025 L 236.7560,165.3025 L 236.7560,177.1425 L 267.5000,177.1425 L 267.5000,165.3025 z " style="fill: none; stroke: #274d03; stroke-width: 1; stroke-opacity: 1.00; stroke-linecap: round; stroke-linejoin: round;" id="ezcGraphPolygon_99"/><g id="ezcGraphTextBox_4"><path d=" M 16.5000,17.0000 L 16.5000,1.5000 L 55.1000,1.5000 L 55.1000,17.0000 L 16.5000,17.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_100"/><text id="ezcGraphTextBox_4_text" x="17.0000" text-length="37.1000px" y="13.9000" style="font-size: 14px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">Set 1</text></g><g id="ezcGraphTextBox_6"><path d=" M 16.5000,35.0000 L 16.5000,19.5000 L 55.1000,19.5000 L 55.1000,35.0000 L 16.5000,35.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_101"/><text id="ezcGraphTextBox_6_text" x="17.0000" text-length="37.1000px" y="31.9000" style="font-size: 14px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">Set 2</text></g><g id="ezcGraphTextBox_11"><path d=" M 125.8600,194.0000 L 125.8600,181.5000 L 154.6400,181.5000 L 154.6400,194.0000 L 125.8600,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_102"/><text id="ezcGraphTextBox_11_text" x="126.3600" text-length="27.2800px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">-500</text></g><g id="ezcGraphTextBox_22"><path d=" M 189.8600,194.0000 L 189.8600,181.5000 L 218.6400,181.5000 L 218.6400,194.0000 L 189.8600,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_103"/><text id="ezcGraphTextBox_22_text" x="190.3600" text-length="27.2800px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">-250</text></g><g id="ezcGraphTextBox_41"><path d=" M 321.2700,194.0000 L 321.2700,181.5000 L 343.2300,181.5000 L 343.2300,194.0000 L 321.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_104"/><text id="ezcGraphTextBox_41_text" x="321.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">250</text></g><g id="ezcGraphTextBox_52"><path d=" M 385.2700,194.0000 L 385.2700,181.5000 L 407.2300,181.5000 L 407.2300,194.0000 L 385.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_105"/><text id="ezcGraphTextBox_52_text" x="385.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">500</text></g><g id="ezcGraphTextBox_63"><path d=" M 449.2700,194.0000 L 449.2700,181.5000 L 471.2300,181.5000 L 471.2300,194.0000 L 449.2700,194.0000 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_106"/><text id="ezcGraphTextBox_63_text" x="449.7700" text-length="20.4600px" y="191.3500" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">750</text></g><g id="ezcGraphTextBox_66"><path d=" M 230.5200,176.0500 L 230.5200,152.4500 L 267.0000,152.4500 L 267.0000,176.0500 L 230.5200,176.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_107"/><text id="ezcGraphTextBox_66_text" x="231.0200" text-length="34.9800px" y="162.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_66_text" x="259.1800" text-length="6.8200px" y="174.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">5</text></g><g id="ezcGraphTextBox_69"><path d=" M 230.5200,144.0500 L 230.5200,120.4500 L 267.0000,120.4500 L 267.0000,144.0500 L 230.5200,144.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_108"/><text id="ezcGraphTextBox_69_text" x="231.0200" text-length="34.9800px" y="130.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_69_text" x="259.1800" text-length="6.8200px" y="142.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">4</text></g><g id="ezcGraphTextBox_72"><path d=" M 230.5200,112.0500 L 230.5200,88.4500 L 267.0000,88.4500 L 267.0000,112.0500 L 230.5200,112.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_109"/><text id="ezcGraphTextBox_72_text" x="231.0200" text-length="34.9800px" y="98.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_72_text" x="259.1800" text-length="6.8200px" y="110.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">3</text></g><g id="ezcGraphTextBox_75"><path d=" M 230.5200,80.0500 L 230.5200,56.4500 L 267.0000,56.4500 L 267.0000,80.0500 L 230.5200,80.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_110"/><text id="ezcGraphTextBox_75_text" x="231.0200" text-length="34.9800px" y="66.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_75_text" x="259.1800" text-length="6.8200px" y="78.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">2</text></g><g id="ezcGraphTextBox_78"><path d=" M 230.5200,48.0500 L 230.5200,24.4500 L 267.0000,24.4500 L 267.0000,48.0500 L 230.5200,48.0500 z " style="fill: #ffffff; fill-opacity: 0.00; stroke: none;" id="ezcGraphPolygon_111"/><text id="ezcGraphTextBox_78_text" x="231.0200" text-length="34.9800px" y="34.3000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">sample</text><text id="ezcGraphTextBox_78_text" x="259.1800" text-length="6.8200px" y="46.4000" style="font-size: 11px; font-family: 'sans-serif'; fill: #2e3436; fill-opacity: 1.00; stroke: none;">1</text></g></g></svg> diff --git a/tests/horizontal_bar_chart_renderer.php b/tests/horizontal_bar_chart_renderer.php new file mode 100644 index 0000000..7353480 --- /dev/null +++ b/tests/horizontal_bar_chart_renderer.php @@ -0,0 +1,96 @@ +<?php +/** + * ezcGraphRenderer2dTest + * + * @package Graph + * @version //autogen// + * @subpackage Tests + * @copyright Copyright (C) 2005-2009 eZ Systems AS. All rights reserved. + * @license http://ez.no/licenses/new_bsd New BSD License + */ + +require_once dirname( __FILE__ ) . '/test_case.php'; + +/** + * Tests for ezcGraph class. + * + * @package Graph + * @subpackage Tests + */ +class ezcGraphHorizontalBarRendererTests extends ezcGraphTestCase +{ + protected $basePath; + + protected $tempDir; + + public static function suite() + { + return new PHPUnit_Framework_TestSuite( __CLASS__ ); + } + + protected function setUp() + { + static $i = 0; + $this->tempDir = $this->createTempDir( __CLASS__ . sprintf( '_%03d_', ++$i ) ) . '/'; + $this->basePath = dirname( __FILE__ ) . '/data/'; + } + + protected function tearDown() + { + if ( !$this->hasFailed() ) + { + $this->removeTempDir(); + } + } + + public function testRenderBasicHorizontalBarChart() + { + $filename = $this->tempDir . __FUNCTION__ . '.svg'; + + $chart = new ezcGraphHorizontalBarChart(); + + $chart->data['Set 1'] = new ezcGraphArrayDataSet( array( 'sample 1' => 234, 'sample 2' => 151, 'sample 3' => 324, 'sample 4' => 120, 'sample 5' => 1 ) ); + + $chart->render( 500, 200, $filename ); + + $this->compare( + $filename, + $this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg' + ); + } + + public function testRenderHorizontalBarChartMultipleBars() + { + $filename = $this->tempDir . __FUNCTION__ . '.svg'; + + $chart = new ezcGraphHorizontalBarChart(); + + $chart->data['Set 1'] = new ezcGraphArrayDataSet( array( 'sample 1' => 234, 'sample 2' => 151, 'sample 3' => 324, 'sample 4' => 120, 'sample 5' => 1 ) ); + $chart->data['Set 2'] = new ezcGraphArrayDataSet( array( 'sample 1' => 543, 'sample 2' => 234, 'sample 3' => 298, 'sample 4' => 5, 'sample 5' => 124) ); + + $chart->render( 500, 200, $filename ); + + $this->compare( + $filename, + $this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg' + ); + } + + public function testRenderHorizontalBarChartNegativeValues() + { + $filename = $this->tempDir . __FUNCTION__ . '.svg'; + + $chart = new ezcGraphHorizontalBarChart(); + + $chart->data['Set 1'] = new ezcGraphArrayDataSet( array( 'sample 1' => 234, 'sample 2' => -151, 'sample 3' => -324, 'sample 4' => 120, 'sample 5' => 1 ) ); + $chart->data['Set 2'] = new ezcGraphArrayDataSet( array( 'sample 1' => 543, 'sample 2' => 234, 'sample 3' => -298, 'sample 4' => 5, 'sample 5' => -124) ); + + $chart->render( 500, 200, $filename ); + + $this->compare( + $filename, + $this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg' + ); + } +} +?> diff --git a/tests/suite.php b/tests/suite.php index ff3c108..de5148f 100644 --- a/tests/suite.php +++ b/tests/suite.php @@ -49,6 +49,7 @@ require_once 'radar_chart.php'; require_once 'renderer_2d_test.php'; require_once 'renderer_2d_legacy_test.php'; require_once 'renderer_3d_test.php'; +require_once 'horizontal_bar_chart_renderer.php'; require_once 'struct_test.php'; require_once 'text_test.php'; require_once 'tools_test.php'; @@ -103,6 +104,7 @@ class ezcGraphSuite extends PHPUnit_Framework_TestSuite $this->addTest( ezcGraphRenderer2dTest::suite() ); $this->addTest( ezcGraphRenderer2dLegacyTest::suite() ); $this->addTest( ezcGraphRenderer3dTest::suite() ); + $this->addTest( ezcGraphHorizontalBarRendererTests::suite() ); $this->addTest( ezcGraphStructTest::suite() ); $this->addTest( ezcGraphSvgDriverTest::suite() ); $this->addTest( ezcGraphSvgSvgFontDriverTest::suite() ); |