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
,否则为空字符串。
我正在使用 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
,否则为空字符串。