Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MpAndroidChart CombinedChart,如何将图表分为上下两部分?_Android_Mpandroidchart - Fatal编程技术网

使用MpAndroidChart CombinedChart,如何将图表分为上下两部分?

使用MpAndroidChart CombinedChart,如何将图表分为上下两部分?,android,mpandroidchart,Android,Mpandroidchart,在下图中,我绘制了一天的价格和每小时的交易量。 为了实现这一点,我使用了组合图表类型。您可以立即看到,由于两个图表都填满了屏幕,因此交易量数据会分散用户对价格数据的注意力 问题: 有没有办法将图表底部的25%留作成交量,将图表顶部的75%留作价格 代码如下: private void setupChart(){ chart.setAutoScaleMinMaxEnabled(true); chart.setBackgroundColor(Color.WHITE); ch

在下图中,我绘制了一天的价格和每小时的交易量。 为了实现这一点,我使用了
组合图表
类型。您可以立即看到,由于两个图表都填满了屏幕,因此交易量数据会分散用户对价格数据的注意力

问题: 有没有办法将图表底部的25%留作成交量,将图表顶部的75%留作价格

代码如下:

private void setupChart(){
    chart.setAutoScaleMinMaxEnabled(true);
    chart.setBackgroundColor(Color.WHITE);
    chart.getDescription().setEnabled(false);
    chart.setPinchZoom(false);
    chart.setDrawGridBackground(false);
    chart.getLegend().setEnabled(true);
    chart.setDrawOrder(new CombinedChart.DrawOrder[]{ CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.CANDLE });// draw bars behind candles

    // right side is for the volume
    YAxis rightAxis = chart.getAxisRight();
    rightAxis.setDrawGridLines(false);
    rightAxis.setAxisMinimum(0f);
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    chart.resetTracking();

    ArrayList<HistoricPrice> historicPrices = presenter.getHistoricalDataGranular(DEFAULT_GRANULARITY_MINS);

    ArrayList<CandleEntry> valuesCandles = new ArrayList<>();
    ArrayList<BarEntry> valuesBars = new ArrayList<>();


    for (int i = progress; (i < progress+MAX_CANDLES_COUNT) && (i < historicPrices.size()); i++) {
        HistoricPrice historicPrice = historicPrices.get(i);
        CandleEntry candleEntry = new CandleEntry(i, historicPrice.high.floatValue(), historicPrice.low.floatValue(), historicPrice.open.floatValue(), historicPrice.close.floatValue());
        valuesCandles.add(candleEntry);
        BarEntry barEntry = new BarEntry(i, Float.valueOf(historicPrice.volume.toPlainString()));
        valuesBars.add(barEntry);
    }

    CandleDataSet set1 = new CandleDataSet(valuesCandles, "Prices");
    set1.setDrawIcons(false);
    set1.setAxisDependency(YAxis.AxisDependency.LEFT);
    set1.setShadowColor(Color.DKGRAY);
    set1.setShadowWidth(0.7f);
    set1.setDecreasingColor(Color.RED);
    set1.setDecreasingPaintStyle(Paint.Style.FILL);
    set1.setIncreasingColor(Color.rgb(122, 242, 84));
    set1.setIncreasingPaintStyle(Paint.Style.FILL);
    set1.setNeutralColor(Color.BLUE);
    set1.setDrawValues(true);
    set1.setShowCandleBar(true);
    CandleData candleData = new CandleData(set1);

    BarDataSet set2 = new BarDataSet(valuesBars, "Volume");
    set2.setColor(ContextCompat.getColor(this, R.color.blue_grey));
    set2.setDrawValues(true);
    set2.setAxisDependency(YAxis.AxisDependency.RIGHT);
    BarData barData = new BarData(set2);

    CombinedData data = new CombinedData();
    data.setData(candleData);
    data.setData(barData);


    chart.setData(data);
    chart.invalidate();
}
private void setupChart(){
chart.setAutoScaleMinMaxEnabled(true);
图表.背景颜色(颜色.白色);
chart.getDescription().setEnabled(false);
chart.setPinchZoom(假);
chart.setDrawGridBackground(假);
chart.getLegend().setEnabled(true);
chart.setDrawOrder(新建CombinedChart.DrawOrder[]{CombinedChart.DrawOrder.BAR,CombinedChart.DrawOrder.CANDLE});//在蜡烛后面画条
//右边是音量
YAxis rightAxis=chart.getAxisRight();
rightAxis.setDrawGridLines(假);
右轴。设置轴最小值(0f);
}
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
chart.resetTracking();
ArrayList historicPrices=presenter.getHistoricalDataGranular(默认粒度为分钟);
ArrayList valuesCandles=新的ArrayList();
ArrayList valuesBars=新的ArrayList();
对于(int i=进度;(i
您可以设置数据集取决于leftAxis还是rightAxis。因此,设置set1依赖于leftAxis,设置set2依赖于RightAxis。完成此操作后,从图形开始的位置调用set1.getAxisLeft().setAxisMinimum(minValue)。 请看下面的代码片段

CandleDataSet set1 = new CandleDataSet(valuesCandles, "Prices");
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
set1.getAxisLeft().setAxisMinimum(minValue)

BarDataSet set2 = new BarDataSet(valuesBars, "Volume");
set2.setAxisDependency(YAxis.AxisDependency.RIGHT);

你找到解决方案了吗?我认为这行不通-如果我将右轴设置为最小值800,我将从图表中丢失大量信息,2241的大峰值仍将突出显示在图表的财务数据中