【问题标题】:Swift iOS Charts - Hide certain Bar Chart value labelsSwift iOS Charts - 隐藏某些条形图值标签
【发布时间】:2019-10-19 16:23:41
【问题描述】:

我正在使用 swift 为我的 iOS 应用程序使用“图表”框架,我正在我的一个 VC 上使用条形图,但目前它看起来很混乱,因为它显示每个值的值标签,即使它是0. 我想知道是否可以仅在值大于 0 时显示标签?我一直在寻找其他问题,但我似乎无法找到答案。我知道我可以使用 chartData.setDrawValues(false) 隐藏所有标签,但是我仍然希望在它们高于 0 时显示这些值。

这是我当前格式化图表的代码 -

    barChart.highlightPerTapEnabled = false
    barChart.highlightPerDragEnabled = false
    barChart.leftAxis.drawAxisLineEnabled = true
    barChart.leftAxis.drawGridLinesEnabled = false
    barChart.xAxis.labelPosition = .bottom
    barChart.xAxis.centerAxisLabelsEnabled = true
    barChart.xAxis.axisMinimum = 0
    barChart.xAxis.axisMaximum = 7
    barChart.xAxis.drawAxisLineEnabled = true
    barChart.xAxis.drawGridLinesEnabled = true
    barChart.rightAxis.enabled = false
    barChart.leftAxis.axisMinimum = 0

我想过做这样的事情-

 for value in chartDataSet.entries {
    if value.y == 0 {
      chartDataSet.drawValuesEnabled = false
    }
    else {
      chartDataSet.drawValuesEnabled = true
    }
 }

但这当然不起作用,因为它为整个集合设置布尔值。

任何帮助将不胜感激! 谢谢

【问题讨论】:

    标签: ios swift charts bar-chart


    【解决方案1】:

    您只需将您的自定义IValueFormatter 提供给BarChartData,如下所示,

    public class XValueFormatter: NSObject, IValueFormatter {
    
        public func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String {
            return value <= 0.0 ? "" : String(describing: value)
        }
    }
    
    let chartData = BarChartData(dataSet: yourSet)
    chartData.setValueFormatter(XValueFormatter())
    

    注意: String(describing: value) 只是为了提供一个可行的例子。您可以应用适当的数字格式化程序将Double 转换为String

    【讨论】:

    • 感谢这工作!对 IValueFormatter 并没有太多经验,因此需要进一步研究以完全理解它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多