【发布时间】:2016-02-14 23:32:41
【问题描述】:
我正在使用 ios-charts 并成功实现了堆叠条形图。 但是,我想在每个堆叠条的顶部显示仅堆栈的总数,而不是堆叠条的每个条目的值。 目前,我所能做的就是隐藏将 chartDataSet.drawValuesEnabled 设置为 false 的各个值。
这是可行的吗?
谢谢!
【问题讨论】:
标签: ios swift mpandroidchart ios-charts
我正在使用 ios-charts 并成功实现了堆叠条形图。 但是,我想在每个堆叠条的顶部显示仅堆栈的总数,而不是堆叠条的每个条目的值。 目前,我所能做的就是隐藏将 chartDataSet.drawValuesEnabled 设置为 false 的各个值。
这是可行的吗?
谢谢!
【问题讨论】:
标签: ios swift mpandroidchart ios-charts
不确定是否有更简单的方法,但您可以使用MarkerView 来完成此操作。 MarkerView 将显示突出显示的条目,因此在附加它后,您需要通过突出显示方法之一突出显示图表中的所有条目:
highlightValue(int xIndex, int dataSetIndex)突出显示给定 DataSet 中给定 x-index 处的值。
highlightValues(Highlight[] highs)突出显示给定数据集中给定索引处的值。
【讨论】:
目前不支持这个。使用 MarkerView 或自己自定义
【讨论】:
chartDataSet.highlightColor = UIColor.clearColor()谢谢你的快速解答!
我可以通过将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,然后当它是yValues 的barchartDataEntry 的最后一项时返回entry.y(这是所有Y 值的总和),否则返回一个空字符串。
【讨论】: