ios-charts / mpandroidcharts 堆叠条形标签总数而不是每个条目的值

ios-charts / mpandroidcharts stacked bar label total instead of values of each entry

我正在使用 ios-charts 并成功实现了堆叠条形图。 但是,我想在每个堆积条的顶部显示 仅堆栈总数 ,而不是堆积条的每个条目的值。 现在,我所能做的就是隐藏 chartDataSet.drawValuesEnabled 设置为 false 的各个值。

这是可行的吗?

谢谢!

不确定是否有更简单的方法,但您可以使用 MarkerView 来完成此操作。 MarkerView 将显示突出显示的条目,因此在附加它之后,您需要通过其中一种突出显示方法突出显示图表中的所有条目:

highlightValue(int xIndex, int dataSetIndex)

Highlights the value at the given x-index in the given DataSet.

highlightValues(Highlight[] highs)

Highlights the values at the given indices in the given DataSets.

目前不支持此功能。使用MarkerView或自己定制

我可以通过将 IValueFormatter 分配给 BarChartData 来做到这一点。

这是我对 IValueFormatter

的实现
class StackedBarChartValueFormatter:NSObject, IValueFormatter {

private let formatter = MKNumberFormatter()

func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String {
   
    guard let barchartDataEntry = entry as? BarChartDataEntry else {
        return formatter.string(from: NSNumber(value: value)) ?? ""
    }
    
    var nonZeroYValues : [Double] = []
    barchartDataEntry.yValues?.forEach {
        
        yValue in
        
        if yValue != 0.0 {
            nonZeroYValues.append(yValue)
        }
    }
    
    if nonZeroYValues.last == value {
        return formatter.string(from: NSNumber(value: entry.y)) ?? ""
    }
    else {
        return ""
    }
}

}

然后将此格式化程序的实例分配给 BarChartData 的值格式化程序,如下所示。

let data = BarChartData(dataSet: chartDataSet)
data.setValueFormatter(StackedBarChartValueFormatter())

请忽略MKNumberFormatter。它只是我创建的一个 NumberFormatter。关键是把ChartDataEntry转成BarChartDataEntry然后returnentry.y(是所有Y值的总和)当它是yValues中的最后一项时barchartDataEntry,否则为空字符串。