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

Posted

技术标签:

【中文标题】ios-charts / mpandroidcharts 堆积条形标签总计而不是每个条目的值【英文标题】:ios-charts / mpandroidcharts stacked bar label total instead of values of each entry 【发布时间】:2016-02-14 23:32:41 【问题描述】:

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

这是可行的吗?

谢谢!

【问题讨论】:

【参考方案1】:

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

highlightValue(int xIndex, int dataSetIndex)

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

highlightValues(Highlight[] highs)

突出显示给定数据集中给定索引处的值。

【讨论】:

谢谢!我真的不知道如何在 ios-charts 中使用 MarkerView,因为我发现的唯一解释是 mpandroidcharts,我不明白如何将它应用于 ios 版本。有什么例子吗?或者你能帮帮我吗?【参考方案2】:

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

【讨论】:

我真的不明白如何在 ios-charts 中使用 MarkerView,因为我发现的唯一解释是 mpandroidcharts,我不明白如何将其应用于 ios 版本。有什么例子吗,或者你能帮帮我吗? 谢谢!我还有一个小问题,如果通过任何改变你知道如果可能的话如何解决它。要查看标记我必须突出显示数据,您知道是否有任何方法不更改突出显示数据的颜色? @Lyra 你需要看看代码。我不记得了。但是将高亮颜色设置为与正常颜色相同可能是一种解决方案 还是谢谢你,终于找到合适的属性改了,成功了,用chartDataSet.highlightColor = UIColor.clearColor()谢谢你的快速解答!【参考方案3】:

我可以通过将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,然后当它是yValuesbarchartDataEntry 的最后一项时返回entry.y(这是所有Y 值的总和),否则返回一个空字符串。

【讨论】:

以上是关于ios-charts / mpandroidcharts 堆积条形标签总计而不是每个条目的值的主要内容,如果未能解决你的问题,请参考以下文章

iOS-Charts 如何只允许点击绘制点?

水平条形图标签

Charts:一个强大的iOS图表框架

ios图表中的圆角条

Android图表库MPAndroidChart——条形图的绘制过程过程,隐隐约约我看到了套路

如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表