Sumbu domain JFree yang dapat digulir dan label penanda khusus

Saya memiliki kode ini untuk menggambar grafik, ini berfungsi dengan baik. Saya butuh dua hal di sini

  1. pada sumbu domain (x) saya ingin dapat menggulir.
  2. Pada spidol saya melihat garis tebal dan tebal. Saya ingin melihat beberapa teks yang dapat dibaca untuk penanda ini.

Untuk saat ini saya melihat keluaran ini masukkan deskripsi gambar di sini

dan setelah memperbesar saya melihat ini

masukkan deskripsi gambar di sini

  1. Juga pada sumbu domain saya memiliki nilai millis. dapatkah saya memetakannya ke tanggal yang dapat dibaca manusia?

    public class Grapher extends ApplicationFrame {
    
        public Grapher(final String title, List<PriceModel> priceModels) {
    
            super(title);
            final XYSeries series = new XYSeries("foo");
            double max = Double.MIN_VALUE, min = Double.MAX_VALUE;
            for (int i = 0; i < priceModels.size(); i++) {
                double price = priceModels.get(i).getPrice();
                if (price < min) {
                    min = price;
                }
                if (price > max) {
                    max = price;
                }
                series.add((double) priceModels.get(i).getDate(), price);
            }
    
            final XYSeriesCollection data = new XYSeriesCollection(series);
            final JFreeChart chart = ChartFactory.createXYLineChart(
                    "XY Series Demo",
                    "X",
                    "Y",
                    data,
                    PlotOrientation.VERTICAL,
                    true,
                    true,
                    false
            );
    
            for (int i = 0; i < priceModels.size(); i++) {
                if (priceModels.get(i).getAction() != null) {
                    Marker marker = new ValueMarker((double) priceModels.get(i).getDate());
                    marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
                    marker.setLabelTextAnchor(TextAnchor.TOP_RIGHT);
    
                    if (priceModels.get(i).getAction() == Types.Action.SELL) {
                        marker.setPaint(Color.green);
                        marker.setLabel("SELL");
                    } else {
                        marker.setPaint(Color.red);
                        marker.setLabel("BUY");
                    }
                    marker.setStroke(new BasicStroke(10.0f));
                    chart.getXYPlot().addDomainMarker(marker);
                }
            }
            chart.getXYPlot().setBackgroundPaint(Color.white);
            chart.getXYPlot().getRenderer().setPaint(Color.BLUE);
            chart.getXYPlot().getRangeAxis().setRange(min - 1, max + 1);
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setBackground(Color.WHITE);
            chartPanel.setRangeZoomable(true);
            chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
            setContentPane(chartPanel);
        }
    
        public static void draw(List<PriceModel> priceModels) {
            final Grapher demo = new Grapher("foo", priceModels);
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
        }
    }
    

person user3833308    schedule 22.05.2017    source sumber
comment
Sudahkah Anda mencoba memasukkan chartPane ke dalam JScrollPane?   -  person MadProgrammer    schedule 22.05.2017
comment
@MadProgrammer bagaimana cara melakukannya?   -  person user3833308    schedule 22.05.2017
comment
Cara menggunakan panel gulir   -  person MadProgrammer    schedule 22.05.2017
comment
@MadProgrammer: Saya akan melihat beberapa hal lain sebelum panel gulir; selengkapnya di bawah ini.   -  person trashgod    schedule 22.05.2017
comment
@trashgod Harus mengakui bahwa saya belum terlalu menggunakan JFreeChart   -  person MadProgrammer    schedule 22.05.2017


Jawaban (1)


Anda harus menggabungkan beberapa pendekatan:

  1. Alternatif pengguliran domain:

  2. Teks penanda: Gunakan XYTextAnnotation, untuk contoh.

  3. Format tanggal: Ganti sumbu pabrik dengan DateAxis dan gunakan setDateFormatOverride(), sebagai contoh.

person trashgod    schedule 22.05.2017
comment
apakah Anda menyarankan keempat poin untuk menggulir diperlukan atau ini adalah opsi? - person user3833308; 23.05.2017
comment
Mereka mewakili alternatif; Saya biasanya hanya mengaktifkan panning. - person trashgod; 23.05.2017
comment
Terima kasih, dalam kasus saya waktu ada pada sumbu X. Ini hanya mengizinkan DateAxis di Y. - person user3833308; 24.05.2017
comment
Saya tidak mengerti. Implementasi SlidingXYDataset yang dikutip di atas menunjukkan NumberAxis pada demo pertama dan DateAxis pada demo kedua; keduanya adalah sumbu domain. - person trashgod; 24.05.2017
comment
Terima kasih @trashgod. dapatkah Anda membantu di sini juga stackoverflow. com/questions/44150322/ ? - person user3833308; 24.05.2017