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

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

这是可行的吗?

谢谢!

【问题讨论】:

    标签: ios swift mpandroidchart ios-charts


    【解决方案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 值的总和),否则返回一个空字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2021-02-06
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多