【问题标题】:iOS Chart Horizontal Bar Chart not showing bar valuesiOS图表水平条形图不显示条形值
【发布时间】:2020-08-13 21:51:27
【问题描述】:

我正在使用 iOS 图表 (V3.3) 绘制水平条形图,用于体育应用的球员表现统计。我希望在每种情况下都将条形值显示在条形旁边。只要玩家同时拥有负数和正数表现点,我就可以做到这一点,但如果玩家只有正数表现点,则不会显示任何值。

我在自己的类中有 BarChartView,并且正在使用此代码

import Charts

class PlayerPerformanceBarChart: HorizontalBarChartView, IValueFormatter {

override init(frame: CGRect) {
    super.init(frame: frame)
}

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func setChart(pf: [PerformanceStat]) {
    noDataTextColor = Style.labelText
    noDataText = gf.getLiteral("noPerformanceData")
    isUserInteractionEnabled = false
    legend.enabled = false
    leftAxis.enabled = false
    rightAxis.enabled = false
    chartDescription?.text = nil
    drawValueAboveBarEnabled = true

    // Data
    var dataEntries: [BarChartDataEntry] = []
    var labels: [String] = []
    for i in 0..<pf.count {
        dataEntries.append(BarChartDataEntry(x: Double(i), y: Double(pf[i].playerPoints)))
        labels.append(pf[i].playerAction)
    }
    let chartDataSet = BarChartDataSet(entries: dataEntries, label: nil)
    chartDataSet.colors = ChartColorTemplates.joyful()
    chartDataSet.valueFormatter = self
    let chartData = BarChartData(dataSets: [chartDataSet])
    chartData.setDrawValues(true)
    
    // X Axis - which for a Horizontal Bar Chart is actually the vertical (Y) axis - I know, crazy but true!!
    let xaxis = self.xAxis
    xaxis.drawGridLinesEnabled = false
    xaxis.labelPosition = .bottom
    xaxis.labelCount = pf.count
    xaxis.axisMinimum = -1
    xaxis.resetCustomAxisMin()
    xaxis.centerAxisLabelsEnabled = false
    xaxis.granularity = 1
    xaxis.granularityEnabled = true
    xaxis.labelTextColor = Style.chartText
    xaxis.valueFormatter = IndexAxisValueFormatter(values: labels)
    clipValuesToContentEnabled = true

    //Chart Format and Display
    data = chartData
}

func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String {
    return Int(value).description
}

}

函数 setChart 由包含视图(即 UIScrollView)调用

它只是一个单一的数据集,所以没有分组。当没有要显示的负值时,我无法找出为什么这些值不会显示。查看图表代码,这与栏的位置超出视口处理程序的范围有关,但我不明白为什么会这样。

任何帮助将不胜感激

【问题讨论】:

  • leftAxis.axisMinimum = 0

标签: swift charts ios-charts


【解决方案1】:

最好创建一个负责值格式化的单独类。

import UIKit
import Charts

class ValueFormatter: NSObject, IAxisValueFormatter {
    func stringForValue(_ value: Double, axis: AxisBase?) -> String {
       /// your code for formatting the values
    }
}

您应该将自定义类指定为您的值格式化程序:

xAxis.valueFormatter = ValueFormatter()

除此之外,请看看这个关于如何为标签设置自定义值的精彩教程:https://medium.com/@spmandrus/ios-charts-custom-y-axis-values-e03cac8850c

【讨论】:

  • 感谢您的 cmets。这仅解决了轴标签,我已经对这些进行了排序。缺少的是第一个示例中每个条的侧面显示的条值(6、3、5 等),但在第二个示例中没有。唯一的区别是第二个例子没有任何负值。如果我将负数加载到第二个示例中,则会出现条形值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-15
  • 2020-03-30
  • 1970-01-01
  • 2023-03-29
  • 2017-09-30
  • 1970-01-01
相关资源
最近更新 更多