使用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的大峰值仍将突出显示在图表的财务数据中