山图对数

问题描述 投票:2回答:2

我试图创建一个使用SciChart山图,但我需要用对数来创建,我想下面的代码,但不改变图表和失踪Y轴的标签。我更改演示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();
        }
    });
}

}

但不工作

android scichart
2个回答
2
投票

有没有标签,因为LogarithmicNumericAxis default TickProvider实现不能产生它设置为y轴自动计算VisibleRange任何蜱(它有下一个值 - 最小= 10460.814629837885,最大值= 13048.710993563885)最近的值这这将满足LogBase = 10将例如10000,然后100000和数据集位于这两个值之间,从而TickProvider返回零个值来呈现。

在这种情况下,有两种可能的解决方法:

  • 尽量挑选一些其他LogBase值;
  • 设置Y轴(例如,你可以尝试使用TickProvider for NumericAxis或创建自己的实现)一些替代TickProvider实现: yRightAxis.setTickProvider(新NumericTickProvider());

2
投票

我改变了代码,并运行良好。这是我的代码:

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();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.