山图对数

时间:2019-02-06 21:07:26

标签: android scichart

我正在尝试使用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 :(得分:2)

没有标签,因为LogarithmicNumericAxis的default TickProvider实现无法为为YAxis设置的自动计算的VisibleRange生成任何刻度(它具有下一个值-Min = 10460.814629837885,Max = 13048.710993563885)将满足LogBase = 10将是10000,然后是100000,示例数据集位于这两个值之间,因此TickProvider返回零值进行渲染。

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

  • 尝试获取其他LogBase值;
  • 为YAxis设置一些替代的TickProvider实现(例如,您可以尝试使用TickProvider for NumericAxis或创建自己的实现):

    yRightAxis.setTickProvider(new NumericTickProvider());

答案 1 :(得分: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();
        }
    });