如何在MPAndroidChart android的折线图中添加不同的颜色setCircleColorHole?

问题描述 投票:0回答:1

有方法为所有点在图表中添加单个圆孔颜色。 setCircleHoleColor(Color.RED);

我在 LineDataSet 中使用 setCircleColors 添加多个圆圈颜色,如下所示:

 ArrayList<Integer> set2CircleColors = new ArrayList<Integer>();
 for (int i = 0; i < values2.size(); i++) {
     if (i == values2.size() - 1) {
        set2CircleColors.add(Color.argb(30, 255, 0, 0));
     } else {
        set2CircleColors.add(Color.TRANSPARENT);
     }
  }
  set2.setCircleColors(set2CircleColors);`

现在我想在这个圆圈内添加不同的圆孔颜色,我该怎么做?

我尝试过自定义库,但目前还没有成功。我想要使用 MPAndroidChart 库在线图点上使用不同的圆圈颜色和不同的孔颜色。

android mpandroidchart linegraph
1个回答
0
投票

在不修改实际库代码的情况下执行此操作的最简单方法是仅使用多个数据集。您可以创建一个仅包含直线(不含圆圈)的数据集,以及其他每个包含一个点的数据集,因此您可以在每个点上设置所需的任何颜色(圆圈和孔)。

如果您有一组具有相同颜色的点,您也可以将它们分组到相同的

LineDataSet
中,并将线宽设置为 0。

Kotlin 示例:

我定义了一个数据类来组织数据

data class EntryData(val x: Float, val y: Float, val color: Int, val holeColor: Int)

然后创建核心数据来绘制(x 和 y 点,以及每个点的颜色)

val entries = listOf(
    EntryData(1f, 1.0f, Color.BLACK,  Color.RED),
    EntryData(2f, 1.5f, Color.LTGRAY, Color.BLUE),
    EntryData(3f, 1.2f, Color.GREEN,  Color.MAGENTA)
)

然后将自定义数据转换为

LineData
对象,应用格式,并将其与图表关联

// First create one data set per point and apply formatting
val dataSets = entries.map { e ->
    LineDataSet(listOf(Entry(e.x, e.y)), "").also { ds ->
        ds.setDrawValues(false)
        ds.setCircleColor(e.color)
        ds.circleHoleColor = e.holeColor
        ds.circleRadius = 8f
        ds.circleHoleRadius = 3f
    }
}.toMutableList()

// Then create a data set for the line (if desired) and 
// add it to the list
val lineDs = LineDataSet(entries.map { Entry(it.x, it.y) }, null)
lineDs.setDrawValues(false)
lineDs.color = Color.BLACK
lineDs.lineWidth = 3f
lineDs.setDrawCircles(false)

dataSets.add(0, lineDs)

// associate the data set with the chart
chart.data = LineData(dataSets.toList())

// and some misc formatting for the chart
chart.legend.isEnabled = false
chart.description.isEnabled = false
chart.xAxis.position = XAxis.XAxisPosition.BOTTOM
chart.axisRight.isEnabled = false

这为每个点提供了不同的孔颜色,如下所示:

Java 示例:

Java中的解决方案类似。首先我们创建原始数据

ArrayList<Entry> entries = new ArrayList<>();
entries.add(new Entry(1f, 1f));
entries.add(new Entry(2f, 1.5f));
entries.add(new Entry(3f, 1.2f));

ArrayList<Integer> circleColors = new ArrayList<>();
circleColors.add(Color.BLACK);
circleColors.add(Color.LTGRAY);
circleColors.add(Color.GREEN);

ArrayList<Integer> holeColors = new ArrayList<>();
holeColors.add(Color.RED);
holeColors.add(Color.BLUE);
holeColors.add(Color.MAGENTA);

然后将其转换为

LineData
对象并将其与图表关联

ArrayList<ILineDataSet> dataSets = new ArrayList<>();

LineDataSet lineDs = new LineDataSet(entries, null);
lineDs.setDrawValues(false);
lineDs.setColor(Color.BLACK);
lineDs.setLineWidth(3f);
lineDs.setDrawCircles(false);
dataSets.add(lineDs);

for(int i = 0; i < entries.size(); ++i) {
    LineDataSet dsi = new LineDataSet(Collections.singletonList(entries.get(i)), null);
    dsi.setDrawValues(false);
    dsi.setCircleColor(circleColors.get(i));
    dsi.setCircleHoleColor(holeColors.get(i));
    dsi.setCircleRadius(8f);
    dsi.setCircleHoleRadius(4f);
    dataSets.add(dsi);
}

chart.setData(new LineData(dataSets));
chart.getLegend().setEnabled(false);
chart.getDescription().setEnabled(false);
chart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
chart.getAxisRight().setEnabled(false);
© www.soinside.com 2019 - 2024. All rights reserved.