Search in sources :

Example 16 with NumberAxis

use of javafx.scene.chart.NumberAxis in project bitsquare by bitsquare.

the class CandleStickChart method layoutPlotChildren.

// -------------- METHODS ------------------------------------------------------------------------------------------
/**
     * Called to update and layout the content for the plot
     */
@Override
protected void layoutPlotChildren() {
    // we have nothing to layout if no data is present
    if (getData() == null) {
        return;
    }
    // update candle positions
    for (int seriesIndex = 0; seriesIndex < getData().size(); seriesIndex++) {
        XYChart.Series<Number, Number> series = getData().get(seriesIndex);
        Iterator<XYChart.Data<Number, Number>> iter = getDisplayedDataIterator(series);
        Path seriesPath = null;
        if (series.getNode() instanceof Path) {
            seriesPath = (Path) series.getNode();
            seriesPath.getElements().clear();
        }
        while (iter.hasNext()) {
            XYChart.Data<Number, Number> item = iter.next();
            double x = getXAxis().getDisplayPosition(getCurrentDisplayedXValue(item));
            double y = getYAxis().getDisplayPosition(getCurrentDisplayedYValue(item));
            Node itemNode = item.getNode();
            CandleData candleData = (CandleData) item.getExtraValue();
            if (itemNode instanceof Candle && candleData != null) {
                Candle candle = (Candle) itemNode;
                double close = getYAxis().getDisplayPosition(candleData.close);
                double high = getYAxis().getDisplayPosition(candleData.high);
                double low = getYAxis().getDisplayPosition(candleData.low);
                // calculate candle width
                double candleWidth = -1;
                if (getXAxis() instanceof NumberAxis) {
                    NumberAxis xa = (NumberAxis) getXAxis();
                    // use 90% width between ticks
                    candleWidth = xa.getDisplayPosition(xa.getTickUnit()) * 0.90;
                }
                // update candle
                candle.update(close - y, high - y, low - y, candleWidth);
                candle.updateTooltip(candleData);
                // position the candle
                candle.setLayoutX(x);
                candle.setLayoutY(y);
            }
            if (seriesPath != null && candleData != null) {
                final double displayPosition = getYAxis().getDisplayPosition(candleData.average);
                if (seriesPath.getElements().isEmpty())
                    seriesPath.getElements().add(new MoveTo(x, displayPosition));
                else
                    seriesPath.getElements().add(new LineTo(x, displayPosition));
            }
        }
    }
}
Also used : Path(javafx.scene.shape.Path) NumberAxis(javafx.scene.chart.NumberAxis) LineTo(javafx.scene.shape.LineTo) CandleData(io.bitsquare.gui.main.market.trades.charts.CandleData) Node(javafx.scene.Node) CandleData(io.bitsquare.gui.main.market.trades.charts.CandleData) MoveTo(javafx.scene.shape.MoveTo) XYChart(javafx.scene.chart.XYChart)

Example 17 with NumberAxis

use of javafx.scene.chart.NumberAxis in project bitsquare by bitsquare.

the class VolumeChart method layoutPlotChildren.

@Override
protected void layoutPlotChildren() {
    if (getData() == null) {
        return;
    }
    for (int seriesIndex = 0; seriesIndex < getData().size(); seriesIndex++) {
        XYChart.Series<Number, Number> series = getData().get(seriesIndex);
        Iterator<XYChart.Data<Number, Number>> iter = getDisplayedDataIterator(series);
        while (iter.hasNext()) {
            XYChart.Data<Number, Number> item = iter.next();
            double x = getXAxis().getDisplayPosition(getCurrentDisplayedXValue(item));
            double y = getYAxis().getDisplayPosition(getCurrentDisplayedYValue(item));
            Node itemNode = item.getNode();
            CandleData candleData = (CandleData) item.getExtraValue();
            if (itemNode instanceof VolumeBar && candleData != null) {
                VolumeBar volumeBar = (VolumeBar) itemNode;
                double candleWidth = -1;
                if (getXAxis() instanceof NumberAxis) {
                    NumberAxis xa = (NumberAxis) getXAxis();
                    // use 90% width between ticks
                    candleWidth = xa.getDisplayPosition(xa.getTickUnit()) * 0.90;
                }
                // 97 is visible chart data height if chart height is 140. 
                // So we subtract 43 form the height to get the height for the bar to the bottom.
                // Did not find a way how to request the chart data height
                final double height = getHeight() - 43;
                // We want min 5px height to allow tooltips
                double upperYPos = Math.min(height - 5, y);
                volumeBar.update(height - upperYPos, candleWidth, candleData);
                volumeBar.setLayoutX(x);
                volumeBar.setLayoutY(upperYPos);
            }
        }
    }
}
Also used : NumberAxis(javafx.scene.chart.NumberAxis) CandleData(io.bitsquare.gui.main.market.trades.charts.CandleData) Node(javafx.scene.Node) XYChart(javafx.scene.chart.XYChart) CandleData(io.bitsquare.gui.main.market.trades.charts.CandleData)

Example 18 with NumberAxis

use of javafx.scene.chart.NumberAxis in project bitsquare by bitsquare.

the class OfferBookChartView method createChart.

private void createChart() {
    xAxis = new NumberAxis();
    xAxis.setForceZeroInRange(false);
    xAxis.setAutoRanging(true);
    yAxis = new NumberAxis();
    yAxis.setForceZeroInRange(false);
    yAxis.setAutoRanging(true);
    yAxis.setLabel("Amount in BTC");
    yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis, "", ""));
    seriesBuy = new XYChart.Series<>();
    seriesSell = new XYChart.Series<>();
    areaChart = new AreaChart<>(xAxis, yAxis);
    areaChart.setLegendVisible(false);
    areaChart.setAnimated(false);
    areaChart.setId("charts");
    areaChart.setMinHeight(300);
    areaChart.setPrefHeight(300);
    areaChart.setPadding(new Insets(0, 30, 0, 0));
    areaChart.getData().addAll(seriesBuy, seriesSell);
}
Also used : NumberAxis(javafx.scene.chart.NumberAxis) Insets(javafx.geometry.Insets) XYChart(javafx.scene.chart.XYChart)

Example 19 with NumberAxis

use of javafx.scene.chart.NumberAxis in project bisq-desktop by bisq-network.

the class OfferBookChartView method createChart.

private void createChart() {
    xAxis = new NumberAxis();
    xAxis.setForceZeroInRange(false);
    xAxis.setAutoRanging(true);
    NumberAxis yAxis = new NumberAxis();
    yAxis.setForceZeroInRange(false);
    yAxis.setAutoRanging(true);
    yAxis.setLabel(Res.get("shared.amountWithCur", Res.getBaseCurrencyCode()));
    yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis, "", ""));
    seriesBuy = new XYChart.Series<>();
    seriesSell = new XYChart.Series<>();
    areaChart = new AreaChart<>(xAxis, yAxis);
    areaChart.setLegendVisible(false);
    areaChart.setAnimated(false);
    areaChart.setId("charts");
    areaChart.setMinHeight(300);
    areaChart.setPrefHeight(300);
    areaChart.setPadding(new Insets(0, 30, 0, 0));
    areaChart.getData().addAll(seriesBuy, seriesSell);
}
Also used : NumberAxis(javafx.scene.chart.NumberAxis) Insets(javafx.geometry.Insets) XYChart(javafx.scene.chart.XYChart)

Example 20 with NumberAxis

use of javafx.scene.chart.NumberAxis in project bisq-desktop by bisq-network.

the class TradesChartsView method createCharts.

// /////////////////////////////////////////////////////////////////////////////////////////
// Chart
// /////////////////////////////////////////////////////////////////////////////////////////
private void createCharts() {
    priceSeries = new XYChart.Series<>();
    priceAxisX = new NumberAxis(0, model.maxTicks + 1, 1);
    priceAxisX.setTickUnit(1);
    priceAxisX.setMinorTickCount(0);
    priceAxisX.setForceZeroInRange(false);
    priceAxisX.setTickLabelFormatter(getTimeAxisStringConverter());
    priceAxisY = new NumberAxis();
    priceAxisY.setForceZeroInRange(false);
    priceAxisY.setAutoRanging(true);
    priceAxisY.setTickLabelFormatter(new StringConverter<Number>() {

        @Override
        public String toString(Number object) {
            String currencyCode = model.getCurrencyCode();
            double doubleValue = (double) object;
            if (CurrencyUtil.isCryptoCurrency(currencyCode)) {
                final double value = MathUtils.scaleDownByPowerOf10(doubleValue, 8);
                return formatter.formatRoundedDoubleWithPrecision(value, 8);
            } else {
                return formatter.formatPrice(Price.valueOf(currencyCode, MathUtils.doubleToLong(doubleValue)));
            }
        }

        @Override
        public Number fromString(String string) {
            return null;
        }
    });
    priceChart = new CandleStickChart(priceAxisX, priceAxisY, new StringConverter<Number>() {

        @Override
        public String toString(Number object) {
            if (CurrencyUtil.isCryptoCurrency(model.getCurrencyCode())) {
                final double value = MathUtils.scaleDownByPowerOf10((long) object, 8);
                return formatter.formatRoundedDoubleWithPrecision(value, 8);
            } else {
                return formatter.formatPrice(Price.valueOf(model.getCurrencyCode(), (long) object));
            }
        }

        @Override
        public Number fromString(String string) {
            return null;
        }
    });
    priceChart.setId("price-chart");
    priceChart.setMinHeight(198);
    priceChart.setPrefHeight(198);
    priceChart.setMaxHeight(300);
    priceChart.setLegendVisible(false);
    // noinspection unchecked
    priceChart.setData(FXCollections.observableArrayList(priceSeries));
    volumeSeries = new XYChart.Series<>();
    volumeAxisX = new NumberAxis(0, model.maxTicks + 1, 1);
    volumeAxisX.setTickUnit(1);
    volumeAxisX.setMinorTickCount(0);
    volumeAxisX.setForceZeroInRange(false);
    volumeAxisX.setTickLabelFormatter(getTimeAxisStringConverter());
    volumeAxisY = new NumberAxis();
    volumeAxisY.setForceZeroInRange(true);
    volumeAxisY.setAutoRanging(true);
    volumeAxisY.setLabel(Res.get("shared.volumeWithCur", Res.getBaseCurrencyCode()));
    volumeAxisY.setTickLabelFormatter(new StringConverter<Number>() {

        @Override
        public String toString(Number object) {
            return formatter.formatCoin(Coin.valueOf(MathUtils.doubleToLong((double) object)));
        }

        @Override
        public Number fromString(String string) {
            return null;
        }
    });
    volumeChart = new VolumeChart(volumeAxisX, volumeAxisY, new StringConverter<Number>() {

        @Override
        public String toString(Number object) {
            return formatter.formatCoinWithCode(Coin.valueOf((long) object));
        }

        @Override
        public Number fromString(String string) {
            return null;
        }
    });
    // noinspection unchecked
    volumeChart.setId("volume-chart");
    volumeChart.setData(FXCollections.observableArrayList(volumeSeries));
    volumeChart.setMinHeight(148);
    volumeChart.setPrefHeight(148);
    volumeChart.setMaxHeight(200);
    volumeChart.setLegendVisible(false);
}
Also used : VolumeChart(bisq.desktop.main.market.trades.charts.volume.VolumeChart) NumberAxis(javafx.scene.chart.NumberAxis) XYChart(javafx.scene.chart.XYChart) StringConverter(javafx.util.StringConverter) CandleStickChart(bisq.desktop.main.market.trades.charts.price.CandleStickChart)

Aggregations

NumberAxis (javafx.scene.chart.NumberAxis)32 XYChart (javafx.scene.chart.XYChart)25 CategoryAxis (javafx.scene.chart.CategoryAxis)15 StackedBarChart (javafx.scene.chart.StackedBarChart)7 BarChart (javafx.scene.chart.BarChart)6 LineChart (javafx.scene.chart.LineChart)6 ArrayList (java.util.ArrayList)5 TreeSet (java.util.TreeSet)4 Node (javafx.scene.Node)4 Path (javafx.scene.shape.Path)3 CandleData (bisq.desktop.main.market.trades.charts.CandleData)2 PedFile (com.github.lindenb.jvarkit.tools.vcfviewgui.PedFile)2 CandleData (io.bitsquare.gui.main.market.trades.charts.CandleData)2 Insets (javafx.geometry.Insets)2 Scene (javafx.scene.Scene)2 StackPane (javafx.scene.layout.StackPane)2 StringConverter (javafx.util.StringConverter)2 CandleStickChart (bisq.desktop.main.market.trades.charts.price.CandleStickChart)1 VolumeChart (bisq.desktop.main.market.trades.charts.volume.VolumeChart)1 GraphDataBean (com.canoo.dp.impl.platform.projector.graph.GraphDataBean)1