当前位置: 首页 > 知识库问答 >
问题:

MPAndroidChart带空格的条+线组合图表

通宾白
2023-03-14

我正在尝试创建一个包含2个Barchart和一个linechart数据集的组合图表。所有数据集的X轴都应该相同。在Barchart之间应该有一个300%的空间集,其中包含BarData setGroupSpace(300F)。这就是问题所在,我不能让linechart也有这个空间,所以linechart的点总是在这2条之间。但看起来linechart有自己的X轴。此外,在X轴上的标签应移位,以2条为中心。有什么提示怎么做吗?

private void setupChart(){

    chart.setDrawOrder(new CombinedChart.DrawOrder[]{CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.BUBBLE, CombinedChart.DrawOrder.CANDLE,
            CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.SCATTER});

    chart.getAxisLeft().setDrawGridLines(false);
    chart.getXAxis().setDrawGridLines(false);
    XAxis x = chart.getXAxis();
    x.setTextSize(14f);
    x.setPosition(XAxis.XAxisPosition.BOTTOM);

    YAxis y = chart.getAxisLeft();
    y.setEnabled(false);

    chart.setDrawGridBackground(false);
    chart.setDrawBarShadow(false);
    chart.setVisibleXRangeMaximum(10f);
    chart.setVisibleXRangeMinimum(10f);
    chart.setDescription("");

    ArrayList<String> labels = new ArrayList<String>();
    for (int i = 0; i < itemcount; i++) {
        String timeString = formatter.format(i * 1000);
        labels.add(timeString);
    }
    CombinedData data = new CombinedData(labels);

    data.setData(generateLineData());
    data.setData(generateBarData());
    chart.setData(data);

    GraphPopup popup = new GraphPopup(this, R.layout.view_graph_tooltip);
    chart.setMarkerView(popup);

    Legend legend = chart.getLegend();
    legend.setTextSize(14f);
    legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);

    //chart.animateY(2000);
    chart.setVisibleXRangeMaximum(10f);
    chart.setVisibleXRangeMinimum(10f);
    chart.moveViewToX(entries1.size());

    buttonAdd = (Button) findViewById(R.id.buttonAdd);
    buttonAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dataset0.addEntry(new BarEntry(3, dataset0.getEntryCount()));
            dataset1.addEntry(new BarEntry(12, dataset1.getEntryCount()));
           // labels.add(labels.size(), "x" + labels.size());
            chart.notifyDataSetChanged(); // let the chart know it's data changed
            chart.setVisibleXRangeMaximum(10f);
            chart.setVisibleXRangeMinimum(10f);
            chart.moveViewToX(entries1.size());
            //chart.invalidate(); // refresh
        }
    });
}

private LineData generateLineData() {

    ArrayList<Entry> entries = new ArrayList<Entry>();
    ArrayList<String> labels = new ArrayList<String>();
    for (int index = 0; index < itemcount; index++) {
        entries.add(new Entry(rand.nextInt(22), index));
        String timeString = formatter.format(index * 3600*24*1000);
        labels.add(timeString);
    }

    LineData d = new LineData(labels);
    LineDataSet set = new LineDataSet(entries, "Line DataSet");
    set.setColor(Color.RED);
    set.setLineWidth(2.5f);
    set.setCircleColor(Color.RED);
    set.setCircleSize(5f);
    set.setFillColor(Color.WHITE);
    set.setDrawCubic(true);
    set.setDrawValues(true);
    set.setValueTextSize(10f);
    set.setValueTextColor(Color.RED);
    set.setAxisDependency(YAxis.AxisDependency.LEFT);

    d.addDataSet(set);

    return d;
}

private BarData generateBarData() {

    ArrayList<String> labels0 = new ArrayList<String>();
    for (int i = 0; i < itemcount; i++) {
        BarEntry entry = new BarEntry(rand.nextInt(22) + 8, i);
        entries.add(entry);
        String timeString = formatter.format(i * 3600*24*1000);
        labels0.add(timeString);
    }

    dataset0.setColor(getResources().getColor(R.color.graph_bar));
    dataset0.setHighLightColor(getResources().getColor(R.color.graph_bar_selected));
    dataset0.setBarSpacePercent(0f);

    ArrayList<String> labels1 = new ArrayList<String>();
    for (int j = 0; j < itemcount; j++) {
        BarEntry entry = new BarEntry(rand.nextInt(22) + 0, j);
        entries1.add(entry);
        String timeString = formatter.format(j * 3600*24*1000);
        labels1.add(timeString);
    }

    dataset1.setColor(getResources().getColor(R.color.color1));
    dataset1.setHighLightColor(getResources().getColor(R.color.color2));
    dataset1.setBarSpacePercent(0f);

    BarData d = new BarData(labels0);
    d.addDataSet(dataset0);
    d.addDataSet(dataset1);
    d.setGroupSpace(300f);

    return d;
}

共有1个答案

晋鹤轩
2023-03-14

单个条之间的间距:

BardataSet.SetBarspacePercent(...);

数据集之间的空间:

Bardata.SetGroupSpace(...);

以百分比为单位的值。

来源链接:https://github.com/philjay/mpandroidchart/issues/197

 类似资料:
  • 我想在Android中用mpandroidchart在LineChart中看到一些数据。但这些数据有临界点。我怎样才能解决这个问题,并且在图表中也能看到截止点呢?

  • 我需要在我的Android应用中画一张“闭图”,像这样: 数据的xIndex先增加后减少。如本例所示: 当我尝试用MPAndroidChart中的数据绘制一条线时,它只呈现数据的前半部分(在xIndex下降之前)。其他数据未显示。 我怎样才能用MPAndroidChart正确地绘制这个数据呢?

  • Highcharts 组合图 以下实例演示了柱形图,线条图,饼图的组合。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 series 配置 设置 series 的 type 属性为 column/line/pie ,series.type 描述了数据列类型。默认值为 "line"。 var series = { type: 'colu

  • 我试图显示几个折线图,但滚动对应该显示图表的页面不起作用。我使用一个位于协调器布局内部的viewpager。 我也想做到以下几点: 退出曲线的线 退出图例中的颜色标签 我知道协调器布局和Viewpager有时需要一些棘手的变通方法,但直到这一刻我都找不到解决方案。我需要添加更多的图表... 主要XML: null 和图表片段XML: null

  • Highcharts 组合图 以下实例演示了双Y轴, 柱形图,线条图组合。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 yAxis 配置 在 yAxis 属性中添加两条Y轴的值 。 var yAxis = [{ // 第一条Y轴 }, { // 第二条Y轴 } }] 实例 文件名:highcharts_combin