Plot Punkte statt Linien?JFreeChart PolarChart
-
19-09-2019 - |
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!
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);