我正在使用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,但这个函数用于整个图表。
非常感谢你的帮助。
答案 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
}