是否可以使用swift中的ios-chart手动逐个设置lineChart的xAxis值?

时间:2016-03-02 16:59:11

标签: ios swift charts linechart ios-charts

我正在使用Swift语言的ios-charts API创建一个lineChart。在xAxis上有mm.dd-day格式的日期,例如03.02-星期三。在yAxis上有双重值。我希望每个星期一都在xAxis上展示,而不是别的。我到目前为止找到的最佳解决方案是 lineChart.xAxis.setLabelsToSkip(6)

这是跳过6标签但是如果图表数据以星期一的日期开头,它就正常工作。 就像这里:what I want

但如果我的图表值从星期二开始,我会看到周二标签:what is not good

我有很多想法,我应该怎么做,但我无法找到解决方案。 我想知道是否有一个函数,什么可以逐个设置xAxis上的每个标签,所以我可以在xAxis.values上使用for循环,如果它是星期一,则设置标签可见,如果它&# 39;不是星期一。像这样:

pseudo:
for i in lineChart.xAxis.values{
  if isMonday(){
    //set label visible
  }else{
    //set label invisible
}}

但我真的很感谢我的问题的其他解决方案。我已经尝试过使用它,但它并没有改变标签:

lineChartView.xAxis.valueFormatter?.stringForXValue(i, original: "Monday", viewPortHandler: cell.lineChartView.viewPortHandler)

我尝试过使用setValueForKey,但我没有键,只有索引,我想从精确的x值启动setLabelsToSkip,但这个函数用于整个图表。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

你的图表从星期二开始,它显示星期二,这是设计的,因为它是第一个值。如果您希望始终显示星期一,请先致电 lineChart.xAxis.setLabelsToSkip(1),这会影响xAxis.axisLabelModulus,我们必须确保我们可以检查每个x值以查看它是否是星期一。

然后,您可以覆盖x轴渲染器的drawLabels(),如:

public override func drawLabels(context context: CGContext, pos: CGFloat, anchor: CGPoint)
{
    ... // same as super
    for i in self.minX.stride(to: min(self.maxX + 1, xAxis.values.count), by: xAxis.axisLabelModulus)
    {
       let label = xAxis.values[i]
       if (!isMonday(label)) // implement isMonday() yourself
       {
           continue
       }
    ... // same as super
}