Горная Диаграмма Логарифмическая - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь создать диаграмму горы с помощью SciChart, но мне нужно создать ее с помощью логарифмического кода, я пробовал приведенный ниже код, но не менял диаграмму и пропускал метку YAxis.Я изменяю демо SciChart на него:

public class MountainChartFragment extends ExampleBaseFragment {
@BindView(R.id.chart)
SciChartSurface surface;

private double selectedLogBase = 10d;
@Override
protected int getLayoutId() {
    return R.layout.example_single_chart_fragment;
}

@Override
protected void initExample() {
    //final IAxis xBottomAxis = sciChartBuilder.newDateAxis().withGrowBy(0.1d, 0.1d).build();
    final IAxis xBottomAxis = sciChartBuilder.newDateAxis().withGrowBy(0.1d, 0.1d).build();
    final IAxis yRightAxis = sciChartBuilder.newLogarithmicNumericAxis().withScientificNotation(ScientificNotation.LogarithmicBase).withLogarithmicBase(selectedLogBase).withGrowBy(0.1d, 0.1d).build();
    //final IAxis yRightAxis = sciChartBuilder.newNumericAxis().withGrowBy(0.1d, 0.1d).build();

    final PriceSeries priceData = DataManager.getInstance().getPriceDataIndu(getActivity());
    final IXyDataSeries<Date, Double> dataSeries = sciChartBuilder.newXyDataSeries(Date.class, Double.class).build();
    dataSeries.append(priceData.getDateData(), priceData.getCloseData());

    final FastMountainRenderableSeries rSeries = sciChartBuilder.newMountainSeries()
            .withZeroLine(0.001)
            .withDataSeries(dataSeries)
            .withStrokeStyle(0xAAFFC9A8, 1f, true)
            .withAreaFillLinearGradientColors(0xAAFF8D42, 0x88090E11)
            .build();

    UpdateSuspender.using(surface, new Runnable() {
        @Override
        public void run() {
            Collections.addAll(surface.getXAxes(), xBottomAxis);
            Collections.addAll(surface.getYAxes(), yRightAxis);
            Collections.addAll(surface.getRenderableSeries(), rSeries);
            Collections.addAll(surface.getChartModifiers(), sciChartBuilder.newModifierGroupWithDefaultModifiers().build());

            sciChartBuilder.newAnimator(rSeries).withWaveTransformation().withInterpolator(new DecelerateInterpolator()).withDuration(3000).withStartDelay(350).start();
        }
    });
}

}

Но не работает

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я изменил код и работал хорошо.Это мой код:

xAxis = sciChartBuilder.newNumericAxis().withGrowBy(0.1d, 0.1d).withVisibleRange(1.1, 2.7).build();
    yAxis = generateLogarithmicAxis();
    //yAxis = sciChartBuilder.newNumericAxis().withGrowBy(0.1d, 0.1d).build();

    //yAxis.setTickProvider(new NumericTickProvider());

    final SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd");

    String data1 = "20190401";
    Date date1 = null;

    Calendar c = Calendar.getInstance();

    final IXyDataSeries<Date, Double> dataSeries = sciChartBuilder.newXyDataSeries(Date.class, Double.class).build();

    try {
        date1 = formatDate.parse(data1);
        for(int i = 0 ; i<1000 ; i+=10){

            double random = Math.random() * 100.0 + 5;
            dataSeries.append(date1, random);

            c.setTime(date1);
            c.add(Calendar.DATE, 1);
            date1 = c.getTime();
        }

    } catch (ParseException e) {
        e.printStackTrace();
    }


    final FastLineRenderableSeries rSeries = sciChartBuilder.newLineSeries().withZeroLine(0.01d).withDataSeries(dataSeries).withStrokeStyle(0xFF279B27, 1f, true).build();

    UpdateSuspender.using(surface, new Runnable() {
        @Override
        public void run() {
            Collections.addAll(surface.getXAxes(), xAxis);
            Collections.addAll(surface.getYAxes(), yAxis);
            Collections.addAll(surface.getRenderableSeries(), rSeries);
            Collections.addAll(surface.getChartModifiers(), sciChartBuilder.newModifierGroupWithDefaultModifiers().build());

            sciChartBuilder.newAnimator(rSeries).withSweepTransformation().withInterpolator(new DecelerateInterpolator()).withDuration(3000).withStartDelay(350).start();
        }
    });
0 голосов
/ 07 февраля 2019

Нет меток, потому что стандартная реализация TickProvider для LogarithmicNumericAxis не может генерировать какие-либо тики для автоматически вычисляемого VisibleRange, который установлен для YAxis (у него есть следующие значения - Min = 10460.814629837885, Max = 13048.710993563885) Ближайшийзначения, которые удовлетворяют LogBase = 10, будут равны 10000, а затем 100000, и набор данных примера лежит между этими двумя значениями, поэтому TickProvider возвращает нулевые значения для визуализации.

В этом случае возможны два обходных пути:

  • Попробуйте выбрать другое значение LogBase;
  • Установите альтернативную реализацию TickProvider для YAxis (например, вы можете попробовать использовать TickProvider для NumericAxis или создать свойсобственная реализация):

    yRightAxis.setTickProvider (new NumericTickProvider ());

...