Frage

Ich habe gefunden SWTChart-Bibliothek und fragen Sie sich nur, wie es möglich wäre, ein Streudiagramm zu erhalten, in dem Punkte unterschiedliche Farben und Größen wie in diesem haben Beispiel.

example
(Quelle: matplotlib.org)

package org.swtchart.examples;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.swtchart.Chart;
import org.swtchart.ILineSeries;
import org.swtchart.LineStyle;
import org.swtchart.ISeries.SeriesType;

/**
* An example for scatter chart.
*/
public class ScatterChartExample {

private static final double[] xSeries = { 0.0, 2.6, 6.5, 4.4, 5.6, 4.3,
    3.4, 10.8, 2.1, 8.9 };
private static final double[] ySeries = { 1.3, 0.0, 3.9, 2.6, 1.1, 0.6,
    3.1, 3.5, 5.6, 4.4 };

/**
* The main method.
* 
* @param args
*            the arguments
*/
public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Scatter Chart");
    shell.setSize(500, 400);
    shell.setLayout(new FillLayout());

    createChart(shell);

    shell.open();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch()) {
        display.sleep();
    }
    }
    display.dispose();
}

/**
* create the chart.
* 
* @param parent
*            The parent composite
* @return The created chart
*/
static public Chart createChart(Composite parent) {

    // create a chart
    Chart chart = new Chart(parent, SWT.NONE);

    // set titles
    chart.getTitle().setText("Scatter Chart");
    chart.getAxisSet().getXAxis(0).getTitle().setText("Score A");
    chart.getAxisSet().getYAxis(0).getTitle().setText("Score B");

    // create scatter series
    ILineSeries scatterSeries = (ILineSeries) chart.getSeriesSet()
        .createSeries(SeriesType.LINE, "scatter series");
    scatterSeries.setLineStyle(LineStyle.NONE);
    scatterSeries.setXSeries(xSeries);
    scatterSeries.setYSeries(ySeries);

    // adjust the axis range
    chart.getAxisSet().adjustRange();

    return chart;
}
}

Wie ist es möglich, ein Streudiagramm zu erhalten, in dem Punkte unterschiedliche Farben und Größen haben?

Danke im Voraus.


Ich dachte, ich versuche nur zuerst zu erben von Linienserien mit diesem einfachen Code

package org.swtchart.examples;
import org.swtchart.Chart;
import org.swtchart.internal.series.LineSeries;

public class ILineSeriesTest extends LineSeries{

  protected ILineSeriesTest(Chart chart, String id) {
      super(chart, id);
  }
}

Im Beispielcode habe ich es geändert in:

ILineSeriesTest scatterSeries = (ILineSeriesTest) chart.getSeriesSet()
            .createSeries(SeriesType.LINE, "scatter series");

Ich habe jedoch den folgenden Fehler erhalten:

Exception in thread "main" java.lang.ClassCastException: org.swtchart.internal.series.LineSeries cannot be cast to org.swtchart.examples.ILineSeriesTest
  at org.swtchart.examples.ScatterChartExampleTest.createChart(ScatterChartExampleTest.java:67)
  at org.swtchart.examples.ScatterChartExampleTest.main(ScatterChartExampleTest.java:38)

Warum hat es nicht geklappt?

Danke im Voraus.

War es hilfreich?

Lösung

Sie können individuelle Farben erzielen, indem Sie verwenden setSymbolColors(Color[] colors):

scatterSeries.setSymbolColors(new Color[] { ColorConstants.red,
            ColorConstants.red, ColorConstants.red, ColorConstants.red,
            ColorConstants.green, ColorConstants.green,
            ColorConstants.green, ColorConstants.blue, ColorConstants.blue,
            ColorConstants.blue });

Beachten Sie, dass in diesem Beispiel verwendet wird ColorConstants von Draw2D.

Wie für die Größen:Sie müssen Ihre eigenen implementieren ISeries welches kann sich um die Größen kümmern.

enter image description here

Andere Tipps

yoshitaka Der Entwickler von SWTchart lieferte die folgende Lösung:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top