是否可以使用 swift 中的 ios-charts 逐个手动设置 lineChart 的 xAxis 值?
Is it possible to set lineChart's xAxis values manually one-by-one using ios-charts in swift?
我正在用 Swift 语言使用 ios-图表 API 创建折线图。在 xAxis 上有 mm.dd 天格式的日期,例如 03.02-Wednesday。在 yAxis 上有双 values.I 想在每个星期一在 xAxis 上显示,没有别的。到目前为止我发现的最佳解决方案是
lineChart.xAxis.setLabelsToSkip(6)
这会跳过 6 个标签,但只要图表数据以星期一的日期开始,它就可以正常工作。
喜欢这里:what I want
但是如果我的图表值从星期二开始,我将只看到星期二标签。: what is not good
我有很多想法我应该怎么做,但我找不到解决方案。
我想知道是否有一个函数,什么可以一个一个地设置 xAxis 上的每个标签,所以我可以在 xAxis.values 上使用 for 循环进行迭代,如果是星期一则设置标签可见,如果不是星期一则跳过。像这样:
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,但这个函数用于整个图表。
非常感谢您的帮助。
您的图表从星期二开始显示星期二,这是设计使然,因为它是第一个值。如果你想总是显示星期一,首先,打电话
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
}
我正在用 Swift 语言使用 ios-图表 API 创建折线图。在 xAxis 上有 mm.dd 天格式的日期,例如 03.02-Wednesday。在 yAxis 上有双 values.I 想在每个星期一在 xAxis 上显示,没有别的。到目前为止我发现的最佳解决方案是
lineChart.xAxis.setLabelsToSkip(6)
这会跳过 6 个标签,但只要图表数据以星期一的日期开始,它就可以正常工作。 喜欢这里:what I want
但是如果我的图表值从星期二开始,我将只看到星期二标签。: what is not good
我有很多想法我应该怎么做,但我找不到解决方案。 我想知道是否有一个函数,什么可以一个一个地设置 xAxis 上的每个标签,所以我可以在 xAxis.values 上使用 for 循环进行迭代,如果是星期一则设置标签可见,如果不是星期一则跳过。像这样:
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,但这个函数用于整个图表。
非常感谢您的帮助。
您的图表从星期二开始显示星期二,这是设计使然,因为它是第一个值。如果你想总是显示星期一,首先,打电话
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
}