0

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

这是可行的吗?

谢谢!

4

3 回答 3

1

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

highlightValue(int xIndex, int dataSetIndex)

突出显示给定 DataSet 中给定 x-index 处的值。

highlightValues(Highlight[] highs)

突出显示给定 DataSet 中给定索引处的值。

于 2015-11-13T17:36:18.947 回答
1

目前它不支持这个。使用 MarkerView 或自己自定义

于 2015-11-14T01:35:06.427 回答
0

我能够通过分配一个IValueFormatterto来做到这一点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。关键是当它是of中的最后一项时,ChartDataEntry转换为BarChartDataEntry然后返回entry.y(这是所有 Y 值的总和),否则为空字符串。yValuesbarchartDataEntry

于 2021-10-05T13:17:40.143 回答