JFreechart Passa attraverso i settori del grafico polare

Ho il seguente codice per il loop del metodo attraverso i settori di un plot polare, ma il metodo viene chiamato più volte, come se fosse in un loop. Voglio creare una serie su ciascun settore del grafico, il settore viene definito dall’unità di spunta dell’asse e dall’unità di spunta dell’angolo. Quando commento il polarDataset.addSeries(new XYSeries("test")) e il ciclo for per questa nuova serie, il problema scompare, facendomi credere che ci potrebbe essere qualcosa in questo. Questa è una continuazione di una domanda pubblicata in precedenza

Qualcuno può spiegarmi perché continua a scorrere? E perché il numero di serie create non è equivalente al numero di settori sul grafico?

 int intSeries = 0; public void createSeriesOnSectors() { for (int r = 0; r <= plot.getMaxRadius(); r += ((NumberAxis) plot .getAxis()).getTickUnit().getSize()) { for (int i = 0; i <= 360; i += plot.getAngleTickUnit() .getSize()) { dataset.addSeries(new XYSeries("test")); intSeries++; for (int e = i; e < i+ plot.getAngleTickUnit().getSize(); e++) { dataset.getSeries(polarDataset.getSeriesCount() - 1).add(90 - e, r- ((NumberAxis) plot.getAxis()).getTickUnit().getSize()); } } }System.out.println("The number of sec is : " + intSeries); } 

Quindi, ho modificato l’esempio di trachGod per ottenere l’implementazione di ChartProgressListener . Ho anche trasformato XYSeriesCollection una variabile globale e ho aggiunto il seguente codice nel metodo chartprogess:

 for (int i = 0; i < 6; i++) { XYSeries seriesy = new XYSeries(i + "π/8 " + "< θ < 2π+" + i + "π/8"); for (int t = 0; t <= 1 * 360; t++) { seriesy.add(90 - t - i * 45, t); } result.addSeries(seriesy); } 

Ma più serie del necessario vengono ancora aggiunte. Qualsiasi aiuto è sempre molto apprezzato.

Il codice completo:

 import java.awt.Color; import java.awt.Dimension; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.NumberTick; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.event.ChartProgressEvent; import org.jfree.chart.event.ChartProgressListener; import org.jfree.chart.plot.PolarPlot; import org.jfree.chart.renderer.DefaultPolarItemRenderer; import org.jfree.chart.renderer.PolarItemRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.TextAnchor; public class tests extends JFrame implements ChartProgressListener { private static final String title = "Archimedes' Spiral"; public static XYSeriesCollection result; public tests(String title) { super(title); JFreeChart chart = createChart(createDataset()); ChartPanel panel = new ChartPanel(chart); panel.setPreferredSize(new Dimension(500, 500)); panel.setMouseZoomable(false); this.add(panel); } private static XYDataset createDataset() { result = new XYSeriesCollection(); XYSeries series = new XYSeries(title); XYSeries series2 = new XYSeries(title); for(int i = 90; i<180; i++){ series2.add(90-i, 200); series2.add(90-i, 0); } result.addSeries(series); result.addSeries(series2); return result; } private JFreeChart createChart(XYDataset dataset) { ValueAxis radiusAxis = new NumberAxis(); radiusAxis.setTickLabelsVisible(false); PolarItemRenderer renderer = new DefaultPolarItemRenderer(); PolarPlot plot = new PolarPlot(dataset, radiusAxis, renderer) { @Override protected List refreshAngleTicks() { List ticks = new ArrayList(); int delta = (int) this.getAngleTickUnit().getSize(); for (int t = 0; t < 360; t += delta) { int tp = (360 + 90 - t) % 360; NumberTick tick = new NumberTick( Double.valueOf(t), String.valueOf(tp), TextAnchor.CENTER, TextAnchor.CENTER, 0.0); ticks.add(tick); } return ticks; } }; plot.setBackgroundPaint(new Color(0x00f0f0f0)); plot.setRadiusGridlinePaint(Color.gray); plot.addCornerTextItem("r(θ) = θ; 0 < θ < 6π"); DefaultPolarItemRenderer renderers = new DefaultPolarItemRenderer(); for (int i = 0; i < dataset.getSeriesCount(); i++) { renderers.setSeriesFilled(i, true); } plot.setRenderer(renderers); JFreeChart chart = new JFreeChart( title, JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(Color.white); chart.addProgressListener(this); return chart; } public static void main(String[] args) { tests demo = new tests(title); demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); demo.pack(); demo.setLocationRelativeTo(null); demo.setVisible(true); } @Override public void chartProgress(ChartProgressEvent e) { if (e.getType() == ChartProgressEvent.DRAWING_FINISHED) { JFreeChart chart = e.getChart(); draw(); } } public void draw(){ for (int i = 0; i < 6; i++) { XYSeries seriesy = new XYSeries(i + "π/8 " + "< θ < 2π+" + i + "π/8"); for (int t = 0; t <= 1 * 360; t++) { seriesy.add(90 - t - i * 45, t); } result.addSeries(seriesy); } } } 

Sembra che tu stia aggiungendo tutte e sei le spirali a ogni iterazione. Ecco la mia variazione sul tuo sscce .

inserisci la descrizione dell'immagine qui

 import java.awt.Color; import java.awt.Dimension; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.NumberTick; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.event.ChartProgressEvent; import org.jfree.chart.event.ChartProgressListener; import org.jfree.chart.plot.PolarPlot; import org.jfree.chart.renderer.DefaultPolarItemRenderer; import org.jfree.chart.renderer.PolarItemRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.TextAnchor; public class tests extends JFrame implements ChartProgressListener { private static final String title = "Archimedes' Spirals"; private XYSeriesCollection result = new XYSeriesCollection(); private DefaultPolarItemRenderer renderers = new DefaultPolarItemRenderer(); private int i; public tests(String title) { super(title); JFreeChart chart = createChart(result); ChartPanel panel = new ChartPanel(chart); panel.setPreferredSize(new Dimension(500, 500)); panel.setMouseZoomable(false); this.add(panel); } private JFreeChart createChart(XYDataset dataset) { ValueAxis radiusAxis = new NumberAxis(); radiusAxis.setTickLabelsVisible(false); PolarItemRenderer renderer = new DefaultPolarItemRenderer(); PolarPlot plot = new PolarPlot(dataset, radiusAxis, renderer) { @Override protected List refreshAngleTicks() { List ticks = new ArrayList(); int delta = (int) this.getAngleTickUnit().getSize(); for (int t = 0; t < 360; t += delta) { int tp = (360 + 90 - t) % 360; NumberTick tick = new NumberTick( Double.valueOf(t), String.valueOf(tp), TextAnchor.CENTER, TextAnchor.CENTER, 0.0); ticks.add(tick); } return ticks; } }; plot.setBackgroundPaint(new Color(0x00f0f0f0)); plot.setRadiusGridlinePaint(Color.gray); plot.addCornerTextItem("r(θ) = θ; 0 < θ < 2π; +iπ/8"); setFilled(dataset); plot.setRenderer(renderers); JFreeChart chart = new JFreeChart( title, JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(Color.white); chart.addProgressListener(this); return chart; } public static void main(String[] args) { tests demo = new tests(title); demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); demo.pack(); demo.setLocationRelativeTo(null); demo.setVisible(true); } @Override public void chartProgress(ChartProgressEvent e) { if (e.getType() == ChartProgressEvent.DRAWING_FINISHED) { System.out.println(e); JFreeChart chart = e.getChart(); draw(); } } public void draw() { if (i < 8) { XYSeries series = new XYSeries(i + "π/8 " + "< θ < 2π+" + i + "π/8"); for (int t = 0; t <= 1 * 360; t++) { series.add(90 - t - i * 45, t); } result.addSeries(series); setFilled(result); i++; } } private void setFilled(XYDataset dataset) { for (int i = 0; i < dataset.getSeriesCount(); i++) { renderers.setSeriesFilled(i, true); } } }