我正在使用 ios-charts 并成功实现了堆叠条形图。但是,我想只显示每个堆叠条顶部的堆栈总数,而不是堆叠条的每个条目的值。现在,我所能做的就是隐藏单独的值,并将 chartDataSet.drawValuesEnabled 设置为 false。
这是可行的吗?
谢谢!
我正在使用 ios-charts 并成功实现了堆叠条形图。但是,我想只显示每个堆叠条顶部的堆栈总数,而不是堆叠条的每个条目的值。现在,我所能做的就是隐藏单独的值,并将 chartDataSet.drawValuesEnabled 设置为 false。
这是可行的吗?
谢谢!
不确定是否有更简单的方法,但您可以使用 aMarkerView
来完成此操作。将MarkerView
显示突出显示的条目,因此在附加它之后,您需要通过突出显示方法之一突出显示图表中的所有条目:
highlightValue(int xIndex, int dataSetIndex)
突出显示给定 DataSet 中给定 x-index 处的值。
highlightValues(Highlight[] highs)
突出显示给定 DataSet 中给定索引处的值。
目前它不支持这个。使用 MarkerView 或自己自定义
我能够通过分配一个IValueFormatter
to来做到这一点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 值的总和),否则为空字符串。yValues
barchartDataEntry