Soru X, Y Ekseni-JfreeChart için Ayar Aralığı


X Ekseni ve Y Ekseni için Range'in nasıl ayarlanacağına dair herhangi bir öneri.

"X Ekseni" Menzil "0,05" ile "0,00 ila 1,00" arasındadır. Yani 0,00 0,05 0,10 0,15 ..... 0,90 0,95 1,00

"Y-Ekseni" Menzil "0.1" farkıyla "0.0 - 1.0" arasındadır. 0.0 0.1 0.2 0.3 0.4 ......... 0.9 1.0 demek

Bu şekilde yapmayı denedim, ancak bu grafiğe yansıyor değil; Bunu nasıl uygulayacağımı bilmiyorum ChartFactory.createScatterPlot().

final NumberAxis domainAxis = new NumberAxis("X-Axis");
domainAxis.setRange(0.00,1.00);
domainAxis.setTickUnit(new NumberTickUnit(0.1));
final NumberAxis rangeAxis = new NumberAxis("Y-Axis");
rangeAxis.setRange(0.0,1.0);
rangeAxis.setTickUnit(new NumberTickUnit(0.05));

public  JPanel createDemoPanel() {
    XYDataset dataset1 = samplexydataset2();
    JFreeChart jfreechart = ChartFactory.createScatterPlot("Scatter Plot Demo",
        "X", "Y",dataset1, PlotOrientation.VERTICAL, true, true, false);
}

Bu konuda herhangi bir yardım harika olurdu.


18
2017-08-29 14:53


Menşei




Cevaplar:


Yeni tahmin ediyorum NumberAxis örnekler arsa tarafından kullanılmamaktadır; Mevcut olanları fabrikadan kullanmak daha kolay olabilir.

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.*;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * @see http://stackoverflow.com/questions/7231824
 * @see http://stackoverflow.com/questions/7205742
 * @see http://stackoverflow.com/questions/7208657
 * @see http://stackoverflow.com/questions/7071057
 */
public class ScatterAdd extends JFrame {

    private static final int N = 8;
    private static final String title = "Scatter Add Demo";
    private static final Random rand = new Random();
    private XYSeries added = new XYSeries("Added");

    public ScatterAdd(String s) {
        super(s);
        final ChartPanel chartPanel = createDemoPanel();
        this.add(chartPanel, BorderLayout.CENTER);
        JPanel control = new JPanel();
        control.add(new JButton(new AbstractAction("Add") {

            @Override
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < N; i++) {
                    added.add(rand.nextDouble(), rand.nextDouble());
                }
            }
        }));
        this.add(control, BorderLayout.SOUTH);
    }

    private ChartPanel createDemoPanel() {
        JFreeChart jfreechart = ChartFactory.createScatterPlot(
            title, "X", "Y", createSampleData(),
            PlotOrientation.VERTICAL, true, true, false);
        XYPlot xyPlot = (XYPlot) jfreechart.getPlot();
        xyPlot.setDomainCrosshairVisible(true);
        xyPlot.setRangeCrosshairVisible(true);
        XYItemRenderer renderer = xyPlot.getRenderer();
        renderer.setSeriesPaint(0, Color.blue);
        NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis();
        domain.setRange(0.00, 1.00);
        domain.setTickUnit(new NumberTickUnit(0.1));
        domain.setVerticalTickLabels(true);
        NumberAxis range = (NumberAxis) xyPlot.getRangeAxis();
        range.setRange(0.0, 1.0);
        range.setTickUnit(new NumberTickUnit(0.1));
        return new ChartPanel(jfreechart);
    }

    private XYDataset createSampleData() {
        XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
        XYSeries series = new XYSeries("Random");
        for (int i = 0; i < N * N; i++) {
            double x = rand.nextDouble();
            double y = rand.nextDouble();
            series.add(x, y);
        }
        xySeriesCollection.addSeries(series);
        xySeriesCollection.addSeries(added);
        return xySeriesCollection;
    }

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ScatterAdd demo = new ScatterAdd(title);
                demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                demo.pack();
                demo.setLocationRelativeTo(null);
                demo.setVisible(true);
            }
        });
    }
}

24
2017-08-29 16:07



Teşekkürler Trashgod ... örnek olarak - Sam
Rica ederim; ayrıca inceleyebilirsiniz JFreeChart.createScatterPlot() kendisi. - trashgod
Mavi işaretleyicilerin boyutunu nasıl değiştirebilirim? Mavi işaretleyicileri büyütmek istiyorum ama kırmızıların boyutunu değiştirmemek istiyorum - C graphics
@Cgraphics: Bunu gör örnek. - trashgod


Yapıştırdığınız kod eksik değilse, sorununuz, arsalarınızla oluşturduğunuz NumberAxis nesnelerini ilişkilendirmediğinizdir.

Yeni NumberAxis nesnelerini el ile oluşturmak yerine, arsalarınızla ilişkilendirilmiş varsayılan ValueAxis nesnelerini almayı ve ardından özelliklerini değiştirmeyi deneyin:

XYPlot xyPlot = jfreechart.getXYPlot();
ValueAxis domainAxis = xyPlot.getDomainAxis();
ValueAxis rangeAxis = xyPlot.getRangeAxis();

domainAxis.setRange(0.0, 1.0);
domainAxis.setTickUnit(new NumberTickUnit(0.1));
rangeAxis.setRange(0.0, 1.0);
rangeAxis.setTickUnit(new NumberTickUnit(0.05));

15
2017-08-29 16:08



Önerileriniz için teşekkürler ... Bunu yapacağım. - Sam