[Schmitzm-commits] r736 - in trunk/src/schmitzm/jfree: . feature/style resource/locales
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Tue Mar 2 17:22:13 CET 2010
Author: alfonx
Date: 2010-03-02 17:22:12 +0100 (Tue, 02 Mar 2010)
New Revision: 736
Modified:
trunk/src/schmitzm/jfree/JFreeChartUtil.java
trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java
trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java
trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle.properties
trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle_de.properties
Log:
AV: The regression coefficient has not been correctly calculated. Also added tooltip to the regression line.
Modified: trunk/src/schmitzm/jfree/JFreeChartUtil.java
===================================================================
--- trunk/src/schmitzm/jfree/JFreeChartUtil.java 2010-03-01 17:15:25 UTC (rev 735)
+++ trunk/src/schmitzm/jfree/JFreeChartUtil.java 2010-03-02 16:22:12 UTC (rev 736)
@@ -45,6 +45,7 @@
import org.jfree.chart.event.RendererChangeEvent;
import org.jfree.chart.event.RendererChangeListener;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
+import org.jfree.chart.labels.XYSeriesLabelGenerator;
import org.jfree.chart.labels.XYToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Plot;
@@ -224,24 +225,28 @@
}
/**
- * Centers a gives {@link Plot}. For
- * {@link CategoryPlot} only the range axis is centered.
+ * Centers a gives {@link Plot}. For {@link CategoryPlot} only the range
+ * axis is centered.
*
* @param axis
* the {@link Plot} to center
* @param boundaryPct
* percentage boundary the absolute maximum is extended with
* @param symetric
- * If <code>true</code> the axis is centered symmetrically around it medium.
+ * If <code>true</code> the axis is centered symmetrically around
+ * it medium.
*/
public static void zoomPlotToFullExtend(Plot plot, Double boundaryPct,
boolean symetric) {
if (plot instanceof XYPlot) {
- zoomAxisToFullExtend(((XYPlot) plot).getDomainAxis(), boundaryPct, symetric);
- zoomAxisToFullExtend(((XYPlot) plot).getRangeAxis(), boundaryPct, symetric);
+ zoomAxisToFullExtend(((XYPlot) plot).getDomainAxis(), boundaryPct,
+ symetric);
+ zoomAxisToFullExtend(((XYPlot) plot).getRangeAxis(), boundaryPct,
+ symetric);
}
if (plot instanceof CategoryPlot)
- zoomAxisToFullExtend(((CategoryPlot) plot).getRangeAxis(), boundaryPct, symetric);
+ zoomAxisToFullExtend(((CategoryPlot) plot).getRangeAxis(),
+ boundaryPct, symetric);
}
/**
@@ -613,8 +618,8 @@
plot, true);
return chart; // ChartFactory.createScatterPlot(title, xAttr, yAttr,
- // dataset, PlotOrientation.HORIZONTAL, true, true,
- // true);
+ // dataset, PlotOrientation.HORIZONTAL, true, true,
+ // true);
}
/**
@@ -639,6 +644,61 @@
}
/**
+ * Returns the parameters 'a' and 'b' for an equation y = a + bx, fitted to
+ * the data using ordinary least squares regression. The result is returned
+ * as a double[], where result[0] --> a, and result[1] --> b.
+ *
+ * @param data
+ * the data.
+ * @param series
+ * the series (zero-based index).
+ *
+ * @return Steigung und Y-Achsenabstand sowie den Produkmomentkorrelationskoefizienten r
+ */
+ public static double[] getOLSRegression(XYDataset data, int series) {
+
+ int n = data.getItemCount(series);
+ if (n < 2) {
+ throw new IllegalArgumentException("Not enough data.");
+ }
+
+ double sumX = 0;
+ double sumXsq = 0;
+ double sumY = 0;
+ double sumYsq = 0;
+ double sumXX = 0;
+ double sumXY = 0;
+ for (int i = 0; i < n; i++) {
+ double x = data.getXValue(series, i);
+ double y = data.getYValue(series, i);
+ sumX += x;
+ sumXsq += x * x;
+ sumY += y;
+ sumYsq += y * y;
+ double xx = x * x;
+ sumXX += xx;
+ double xy = x * y;
+ sumXY += xy;
+ }
+ double sxx = sumXX - (sumX * sumX) / n;
+ double sxy = sumXY - (sumX * sumY) / n;
+ double xbar = sumX / n;
+ double ybar = sumY / n;
+
+ double[] result = new double[3];
+ result[1] = sxy / sxx;
+ result[0] = ybar - result[1] * xbar;
+
+ // Added by me:
+ result[2] = (n * sumXY - sumX * sumY)
+ / Math.sqrt((n * sumXsq - sumX * sumX)
+ * (n * sumYsq - sumY * sumY));
+
+ return result;
+
+ }
+
+ /**
* Creates sample data for a regression line of an {@link XYDataset}.
*
* @param dataset
@@ -660,17 +720,40 @@
int series, String seriesKey, double startX, double endX,
int sampleCount) {
try {
- double[] coefficients = Regression
- .getOLSRegression(dataset, series);
+ double[] coefficients = getOLSRegression(dataset, series);
- seriesKey += " r²="
- + DecimalFormat.getInstance().format(
- coefficients[1] * coefficients[1]);
+ double r = coefficients[2];
+ double rAbs = Math.abs(r);
+ seriesKey += ", r=" + DecimalFormat.getInstance().format(r);
+ // Depending on the quality of the regression, we add a note
+ // (c) LAUX
+ if (rAbs < 0.01) {
+ seriesKey += " (" + RESOURCE.getString("regression.none") + ")";
+ } else if (rAbs < 0.5) {
+ seriesKey += " (" + RESOURCE.getString("regression.weak") + ")";
+ } else if (rAbs < 0.7) {
+ seriesKey += " (" + RESOURCE.getString("regression.medium")
+ + ")";
+ } else if (rAbs < 0.86) {
+ seriesKey += " (" + RESOURCE.getString("regression.strong")
+ + ")";
+ } else if (rAbs < 1.) {
+ seriesKey += " (" + RESOURCE.getString("regression.verystrong")
+ + ")";
+ } else
+ seriesKey += " (" + RESOURCE.getString("regression.total") + ")";
+
Function2D curve = new LineFunction2D(coefficients[0],
coefficients[1]);
+
+// SK: Played around to make the line longer, but then the view will automatically get bigger also.. So it is probably OK the way it is
+// return DatasetUtilities.sampleFunction2D(curve, startX-Math.abs(endX-startX)*10, endX+Math.abs(endX-startX)*10, 2,
+// seriesKey);
+
return DatasetUtilities.sampleFunction2D(curve, startX, endX, 2,
- seriesKey);
+ seriesKey);
+
} catch (Exception err) {
// according to the data sometimes the regression
// dataset could not be created
@@ -698,8 +781,18 @@
// create and set the renderer for the regression line
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true,
false);
+ final String string = RESOURCE.getString("regressionline.tooltip");
+ renderer.setLegendItemToolTipGenerator(new XYSeriesLabelGenerator() {
+
+ @Override
+ public String generateLabel(XYDataset dataset, int series) {
+ return string;
+ }
+ });
renderer.setSeriesPaint(0, Color.blue);
plot.setRenderer(datasetCount, renderer);
+
+ // TODO Ich will einen schönen Tooltip für die Regressionslinine in der Legende
}
// ###################
Modified: trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java
===================================================================
--- trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java 2010-03-01 17:15:25 UTC (rev 735)
+++ trunk/src/schmitzm/jfree/feature/style/FeatureChartStyle.java 2010-03-02 16:22:12 UTC (rev 736)
@@ -74,24 +74,32 @@
*/
public static enum AggregationFunction {
/** Count of the attribute values. */
- COUNT,
+ COUNT(false),
/** Sum of the attribute values. */
- SUM,
+ SUM(false),
// /** Sum of the absolute attribute values. */
// SUM_ABS,
/** Average of the attribute values. */
- AVG,
+ AVG(false),
+ /** Weighted average of the attribute values. Need another attribute column selected **/
+ AVG_WEIGHTED(true),
// /** Median of the attribute values. */
// MEDIAN,
/** Minimum attribute value. */
- MIN,
+ MIN(false),
/** Maximum attribute value. */
- MAX,
+ MAX(false),
/** Variance of the attribute values. */
- VARIANCE,
+ VARIANCE(false),
/** Standard deviation of the attribute values. */
- STND_DEV;
+ STND_DEV(false);
+
+ private final boolean weighted;
+ private AggregationFunction(boolean weighted) {
+ this.weighted = weighted;
+ }
+
/**
* Prefix for the title (.TITLE) and description (.DESC) key in the
* resource bundle.
@@ -111,6 +119,7 @@
public Double getResult(StaticBin1D statistics) {
switch (this) {
case AVG:
+ case AVG_WEIGHTED:
return statistics.mean();
case MAX:
return statistics.max();
@@ -197,6 +206,11 @@
public static ListCellRenderer getListCellRenderer() {
return listCellRenderer;
}
+
+ /** Returns true, if this aggreation method is used a second attribute for weighting **/
+ public boolean isWeighted() {
+ return weighted;
+ }
}
/**
Modified: trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java
===================================================================
--- trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java 2010-03-01 17:15:25 UTC (rev 735)
+++ trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java 2010-03-02 16:22:12 UTC (rev 736)
@@ -68,6 +68,7 @@
import schmitzm.jfree.feature.Feature2SeriesDatasetMapping;
import schmitzm.jfree.feature.FeatureDatasetMetaData;
import schmitzm.jfree.feature.FeatureDatasetSelectionModel;
+import schmitzm.jfree.feature.style.FeatureChartStyle.AggregationFunction;
import skrueger.AttributeMetadata;
import skrueger.geotools.AttributeMetadataMap;
@@ -253,12 +254,12 @@
// Calculate any statistics needed for normalization.
HashMap<String, StaticBin1D> statisticsForNormalization = calcStatisticsForNormalization(
fc, chartStyle);
- // Prepare set for statistics to calculate aggregation
+ // Prepare set for statistics to calculate aggregation
// functions (one statistic for each range attribute of
// each domain value)
- HashMap<Number, StaticBin1D>[] statisticsForAggregation = new HashMap[attrCount];
- for (int i=1; i<attrCount; i++)
- statisticsForAggregation[i] = new HashMap<Number, StaticBin1D>();
+ HashMap<Number, StaticBin1D>[] statisticsForAggregation = new HashMap[attrCount];
+ for (int i = 1; i < attrCount; i++)
+ statisticsForAggregation[i] = new HashMap<Number, StaticBin1D>();
// If dataset should be sorted, the features must be sorted first
// according to the domain attribute. The "autoSort" functionality
@@ -288,23 +289,31 @@
Number xValue = (Number) f.getAttribute(xAttrName);
// Filter out NODATA values
- xValue = chartStyle.filterNoDataValue(ChartStyle.DOMAIN_AXIS, xValue);
+ xValue = chartStyle.filterNoDataValue(ChartStyle.DOMAIN_AXIS,
+ xValue);
if (xValue == null)
continue;
- /*
- * Normalization of the domain axis value (if they are not
- * handled as categories)
- */
- if (chartStyle.isAttributeNormalized(ChartStyle.DOMAIN_AXIS))
- xValue = normalize(xValue, xAttrName,
- statisticsForNormalization);
+ /*
+ * Normalization of the domain axis value (if they are not handled
+ * as categories)
+ */
+ if (chartStyle.isAttributeNormalized(ChartStyle.DOMAIN_AXIS))
+ xValue = normalize(xValue, xAttrName,
+ statisticsForNormalization);
// Determine the Y values and fill the series
for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
String yAttrName = chartStyle.getAttributeName(attrIdx);
Number yValue = (Number) f.getAttribute(yAttrName);
+ AggregationFunction attributeAggregation = chartStyle
+ .getAttributeAggregation(attrIdx);
+ long yWeightValue = 1;
+// if (attributeAggregation != null && attributeAggregation.isWeighted())
+// yWeightValue = ((Number) f.getAttribute("POP_CNTRY"))
+// .longValue();
+
// Filter out NoDataValues
yValue = chartStyle.filterNoDataValue(attrIdx, yValue);
if (yValue == null)
@@ -317,43 +326,51 @@
// Fill series, if no aggregation function is defined.
// Otherwise fill statistic (dataset is filled later!)
- if ( chartStyle.getAttributeAggregation(attrIdx) == null ) {
- // Fill series
- xySeries[attrIdx].add(xValue, yValue);
- // Mapping between FID and data index in series
- mapping.setMapping(f.getID(), yAttrName, datasetIdx++);
+ if (attributeAggregation == null) {
+ // Fill series
+ xySeries[attrIdx].add(xValue, yValue);
+ // Mapping between FID and data index in series
+ mapping.setMapping(f.getID(), yAttrName, datasetIdx++);
} else {
- StaticBin1D aggrStat = statisticsForAggregation[attrIdx].get(xValue);
- if ( aggrStat == null ) {
- aggrStat = new DynamicBin1D();
- statisticsForAggregation[attrIdx].put(xValue, aggrStat);
- }
- aggrStat.add(yValue.doubleValue());
- // TODO: Mapping vormerken (??)
- // Problem: siehe unten
+ // The values for this are aggregated
+ StaticBin1D aggrStat = statisticsForAggregation[attrIdx]
+ .get(xValue);
+ if (aggrStat == null) {
+ aggrStat = new DynamicBin1D();
+ statisticsForAggregation[attrIdx].put(xValue, aggrStat);
+ }
+
+ // The default weight is 1
+// for (int i = 0; i < yWeightValue; i++)
+ aggrStat.add(yValue.doubleValue());
+
+ // TODO: Mapping vormerken (??)
+ // Problem: siehe unten
}
}
}
-
+
// Fill series for aggregated range attributes
- for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
- String yAttrName = chartStyle.getAttributeName(attrIdx);
- FeatureChartStyle.AggregationFunction aggrFunc = chartStyle.getAttributeAggregation(attrIdx);
- if ( aggrFunc == null )
- continue;
- for (Number xValue : statisticsForAggregation[attrIdx].keySet() ) {
- StaticBin1D aggrStat = statisticsForAggregation[attrIdx].get(xValue);
- Number yValue = aggrFunc.getResult(aggrStat);
- // Fill series
- xySeries[attrIdx].add(xValue, yValue);
- // TODO: Mapping setzen
- // Problem: Pro dataset item kann nur EINE FeatureID gesetzt
- // werden (Feature2DatasetMapping, Zeile 124)
-// // Mapping between FID and data index in series
-// mapping.setMapping(f.getID() ??, yAttrName, datasetIdx++);
- }
- }
-
+ for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
+// String yAttrName = chartStyle.getAttributeName(attrIdx);
+ FeatureChartStyle.AggregationFunction aggrFunc = chartStyle
+ .getAttributeAggregation(attrIdx);
+ if (aggrFunc == null)
+ continue;
+ for (Number xValue : statisticsForAggregation[attrIdx].keySet()) {
+ StaticBin1D aggrStat = statisticsForAggregation[attrIdx]
+ .get(xValue);
+ Number yValue = aggrFunc.getResult(aggrStat);
+ // Fill series
+ xySeries[attrIdx].add(xValue, yValue);
+ // TODO: Mapping setzen
+ // Problem: Pro dataset item kann nur EINE FeatureID gesetzt
+ // werden (Feature2DatasetMapping, Zeile 124)
+ // // Mapping between FID and data index in series
+ // mapping.setMapping(f.getID() ??, yAttrName, datasetIdx++);
+ }
+ }
+
return dataset;
}
@@ -510,12 +527,12 @@
// Calculate any statistics needed for normalization.
HashMap<String, StaticBin1D> statisticsForNormalization = calcStatisticsForNormalization(
fc, chartStyle);
- // Prepare set for statistics to calculate aggregation
- // functions (one statistic for each range attribute of
- // each domain value)
- HashMap<Comparable<?>, StaticBin1D>[] statisticsForAggregation = new HashMap[attrCount];
- for (int i=1; i<attrCount; i++)
- statisticsForAggregation[i] = new HashMap<Comparable<?>, StaticBin1D>();
+ // Prepare set for statistics to calculate aggregation
+ // functions (one statistic for each range attribute of
+ // each domain value)
+ HashMap<Comparable<?>, StaticBin1D>[] statisticsForAggregation = new HashMap[attrCount];
+ for (int i = 1; i < attrCount; i++)
+ statisticsForAggregation[i] = new HashMap<Comparable<?>, StaticBin1D>();
// Create a new dataset and insert the series
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
@@ -549,16 +566,25 @@
.getAttribute(xAttrName);
// Filter out NODATA values
- catValue = chartStyle.filterNoDataValue(ChartStyle.DOMAIN_AXIS, catValue);
+ catValue = chartStyle.filterNoDataValue(ChartStyle.DOMAIN_AXIS,
+ catValue);
if (catValue == null)
continue;
// Determine the Y values and fill the dataset
for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
+ AggregationFunction attributeAggregation = chartStyle.getAttributeAggregation(attrIdx);
+
String yAttrName = chartStyle.getAttributeName(attrIdx);
Number yValue = (Number) f.getAttribute(yAttrName);
+ // By default the wight is 1 => no weighting. If the aggregation uses weighting, read the weight attribnute
+ long yWeightValue = 1;
+// if (attributeAggregation != null && attributeAggregation.isWeighted())
+// yWeightValue = ((Number) f.getAttribute("POP_CNTRY"))
+// .longValue();
+
// Filter out NoDataValues
yValue = chartStyle.filterNoDataValue(attrIdx, yValue);
if (yValue == null)
@@ -569,45 +595,55 @@
yValue = normalize(yValue, yAttrName,
statisticsForNormalization);
- // Fill series, if no aggregation function is defined.
- // Otherwise fill statistic (dataset is filled later!)
- if ( chartStyle.getAttributeAggregation(attrIdx) == null ) {
- // Add data to dataset
- dataset.addValue(yValue, yAttrName, catValue);
- // Mapping between FID and data index in series
- mapping.setMapping(f.getID(), yAttrName, catValue);
- } else {
- StaticBin1D aggrStat = statisticsForAggregation[attrIdx].get(catValue);
- if ( aggrStat == null ) {
- aggrStat = new DynamicBin1D();
- statisticsForAggregation[attrIdx].put(catValue, aggrStat);
- }
- aggrStat.add(yValue.doubleValue());
- // TODO: Mapping vormerken (??)
- // Problem: siehe unten
- }
+ // Fill series, if no aggregation function is defined.
+ // Otherwise fill statistic (dataset is filled later!)
+ if (attributeAggregation == null) {
+ // Add data to dataset
+ dataset.addValue(yValue, yAttrName, catValue);
+ // Mapping between FID and data index in series
+ mapping.setMapping(f.getID(), yAttrName, catValue);
+ } else {
+ StaticBin1D aggrStat = statisticsForAggregation[attrIdx]
+ .get(catValue);
+ if (aggrStat == null) {
+ aggrStat = new DynamicBin1D();
+ statisticsForAggregation[attrIdx].put(catValue,
+ aggrStat);
+ }
+
+ // The default weight is 1
+// for (int i = 0; i < yWeightValue; i++)
+ aggrStat.add(yValue.doubleValue());
+
+ // TODO: Mapping vormerken (??)
+ // Problem: siehe unten
+ }
}
}
- // Fill series for aggregated range attributes
- for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
- String yAttrName = chartStyle.getAttributeName(attrIdx);
- FeatureChartStyle.AggregationFunction aggrFunc = chartStyle.getAttributeAggregation(attrIdx);
- if ( aggrFunc == null )
- continue;
- for (Comparable<?> catValue : statisticsForAggregation[attrIdx].keySet() ) {
- StaticBin1D aggrStat = statisticsForAggregation[attrIdx].get(catValue);
- Number yValue = aggrFunc.getResult(aggrStat);
- // Fill series
- dataset.addValue(yValue, yAttrName, catValue);
- // TODO: Mapping setzen
- // Problem: Pro dataset item kann nur EINE FeatureID gesetzt
- // werden (Feature2DatasetMapping, Zeile 124)
-// // Mapping between FID and data index in series
-// mapping.setMapping(f.getID() ??, yAttrName, datasetIdx++);
- }
- }
+ // Fill series for aggregated range attributes
+ for (int attrIdx = 1; attrIdx < attrCount; attrIdx++) {
+ String yAttrName = chartStyle.getAttributeName(attrIdx);
+ FeatureChartStyle.AggregationFunction aggrFunc = chartStyle
+ .getAttributeAggregation(attrIdx);
+ if (aggrFunc == null)
+ continue;
+ for (Comparable<?> catValue : statisticsForAggregation[attrIdx]
+ .keySet()) {
+ StaticBin1D aggrStat = statisticsForAggregation[attrIdx]
+ .get(catValue);
+ Number yValue = aggrFunc.getResult(aggrStat);
+ // Fill series
+ dataset.addValue(yValue, yAttrName, catValue);
+ // TODO: Mapping setzen
+ // Problem: Pro dataset item kann nur EINE FeatureID gesetzt
+ // werden (Feature2DatasetMapping, Zeile 124)
+ // // Mapping between FID and data index in series
+ // mapping.setMapping(f.getID() ??, yAttrName,
+ // datasetIdx++);
+ }
+ }
} finally {
if (features != null) {
// this is a hint
@@ -665,12 +701,13 @@
}
/**
- * Passes the NODATA Values stored in the {@link AttributeMetadataMap} to the attributes of the {@link ChartStyle}.
+ * Passes the NODATA Values stored in the {@link AttributeMetadataMap} to
+ * the attributes of the {@link ChartStyle}.
*/
public static void passNoDataValues(
AttributeMetadataMap attributeMetaDataMap,
FeatureChartStyle featureChartStyle) {
-
+
// Pass the NODATA values for the attributes to the ChartStyle
for (int idx = 0; idx < featureChartStyle.getAttributeCount(); idx++) {
Modified: trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle.properties
===================================================================
--- trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle.properties 2010-03-01 17:15:25 UTC (rev 735)
+++ trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle.properties 2010-03-02 16:22:12 UTC (rev 736)
@@ -61,6 +61,8 @@
AggregationFunction.SUM_ABS.Desc=Sum of the absolute attribute values
AggregationFunction.AVG.Title=Average
AggregationFunction.AVG.Desc=Average attribute value
+AggregationFunction.AVG_WEIGHTED.Title=Weighted average
+AggregationFunction.AVG_WEIGHTED.Desc=Weighted average attribute value
AggregationFunction.MEDIAN.Title=Median
AggregationFunction.MEDIAN.Desc=Median attribute value
AggregationFunction.MIN.Title=Minimum
@@ -71,3 +73,13 @@
AggregationFunction.VARIANCE.Desc=Variance of the attribute values
AggregationFunction.STND_DEV.Title=Standard Deviation
AggregationFunction.STND_DEV.Desc=Standard deviation of the attribute values
+
+regression.none=no relation
+regression.weak=weak relation
+regression.medium=medium relation
+regression.strong=strong relation
+regression.verystrong=very strong relation
+regression.total=perfect relation
+
+regressionline.tooltip=<html><i>r</i> is the product-moment-correlation coefficient and gives information about how strong the variables are related.</html>
+
Modified: trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle_de.properties
===================================================================
--- trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle_de.properties 2010-03-01 17:15:25 UTC (rev 735)
+++ trunk/src/schmitzm/jfree/resource/locales/JFreeResourceBundle_de.properties 2010-03-02 16:22:12 UTC (rev 736)
@@ -36,7 +36,7 @@
diagram.points=Punkte
diagram.lines=Linien
diagram.bars=Balken
-diagram.areas=Fl\u00E4chen
+diagram.areas=Fl\u00e4chen
ChartType_BAR.Title=Balkendiagramm
ChartType_BAR.Object.Title=Balken
@@ -44,8 +44,8 @@
ChartType_SCATTER.Object.Title=Punkte
ChartType_PIE.Title=Kreisdiagramm
ChartType_PIE.Object.Title=Teil
-ChartType_AREA.Title=Fl\u00E4chendiagramm
-ChartType_AREA.Object.Title=Fl\u00E4chen
+ChartType_AREA.Title=Fl\u00e4chendiagramm
+ChartType_AREA.Object.Title=Fl\u00e4chen
ChartType_LINE.Title=Liniendiagramm
ChartType_LINE.Object.Title=Linie
ChartType_POINT.Title=Punktdiagramm
@@ -72,3 +72,11 @@
AggregationFunction.STND_DEV.Title=Standard-Abweichung
AggregationFunction.STND_DEV.Desc=Standard-Abweichung der Attribut-Werte
+regression.none=kein Zusammenhang
+regression.weak=schwacher Zusammenhang
+regression.medium=mittlerer Zusammenhang
+regression.strong=starteker Zusammenhang
+regression.verystrong=sehr starker Zusammenhang
+regression.total=vollkommener Zusammenhang
+
+regressionline.tooltip=<html><i>r</i> ist der Produktmomentkorrelationskoefizient und sagt aus, wie stark zwei Variablen voneinander abh\u00e4ngen.
\ No newline at end of file
More information about the Schmitzm-commits
mailing list