Frage

Derzeit, die PolarChart mit allen Koordinaten mit Linien schaffen ein polygon.Ich will ihn in den plot jeder Punkt mit einem Punkt und NICHT mit Ihnen zusammen.Ist das möglich?

Ich habe versucht mit translateValueThetaRadiusToJava2D() und Graphics2D Kreise, aber es ist sehr umständlich und gekünstelt.

Irgendwelche Vorschläge willkommen!

War es hilfreich?

Lösung

So ist die DefaultPolarItemRenderer in allen polaren Punkte nimmt, wandelt die Polarpunkte auf regelmäßige Java2D Koordinaten, macht eine Polygon mit diesen Punkten und dann zieht es. Hier ist, wie ich es Punkte anstelle eines Polygons zu zeichnen:

public class MyDefaultPolarItemRenderer extends DefaultPolarItemRenderer {

    @Override
    public void drawSeries(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D dataArea, PlotRenderingInfo info, PolarPlot plot, XYDataset dataset, int seriesIndex) {


        int numPoints = dataset.getItemCount(seriesIndex);
        for (int i = 0; i < numPoints; i++) {

            double theta = dataset.getXValue(seriesIndex, i);
            double radius = dataset.getYValue(seriesIndex, i);
            Point p = plot.translateValueThetaRadiusToJava2D(theta, radius,
                    dataArea);
            Ellipse2D el = new Ellipse2D.Double(p.x, p.y, 5, 5);
            g2.fill(el);
            g2.draw(el);
        }
    }
}

und dann diese Klasse instanziiert an anderer Stelle:

    MyDefaultPolarItemRenderer dpir = new MyDefaultPolarItemRenderer();
    dpir.setPlot(plot);
    plot.setRenderer(dpir);

Andere Tipps

Dies ist ein wenig härter.Gegeben PolarPlot, Sie erhalten Ihre AbstractRenderer und stellen Sie die Form.Für Beispiel,

PolarPlot plot = (PolarPlot) chart.getPlot();
AbstractRenderer ar = (AbstractRenderer) plot.getRenderer();
ar.setSeriesShape(0, ShapeUtilities.createDiamond(5), true);

Der Diamant wird in der Legende erscheint, aber der DefaultPolarItemRenderer weder macht Formen, noch bietet line-Steuerung.Sie würde haben zu verlängern die Standard-renderer und überschreiben drawSeries(). XYLineAndShapeRenderer ist ein schönes Beispiel für das Studium;Sie können sehen, wie es verwendet wird in TimeSeriesChartDemo1.

Wenn dies terra incognita zu Sie, ich würde empfehlen Die JFreeChart Developer Guide.

Haftungsausschluss:Nicht in Verbindung mit Object Refinery Limited;Ich bin ein zufriedener Kunde und sehr geringen Beitrag.

Dies ist eine ausgezeichnete Diskussion, falls Sie die Funktion, die Farbe, die durch Benutzer der Serie zugeordnet abholen

hinzufügen ...

Color c =(Color)this.lookupSeriesPaint(seriesIndex);
g2.setColor(c);

vor ...

g.draw(e1);

es gibt auch andere Funktionen ... Verwendung der Code-Vervollständigung, um zu sehen, was sonst noch Funktionen gegen Serie sind mit dem Namen rendereing von lookupSeries........(int seriesindex) Start

fand ich eine ziemlich seltsame Weise die Punkte ohne Linien verbinden, sie zu erhalten.

setze ich die Stroke von die Renderer ein dünn sein Linie, mit einem Schuss Phase von 0, und die Länge der 1E10:

Stroke dashedStroke = new BasicStroke(
                          0.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                          0.0f, new float[] {0.0f, 1e10f}, 1.0f );
renderer.setSeriesStroke(0, dashedStroke);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top