Swift 多重折线图,don';我不想绘制0值。斯威夫特2
我正在使用ios图表库生成多个折线图。(danielgindi/Charts)。我正在为从核心数据检索的x-axsis创建一个数组,如果x周没有值,我将附加一个0 我有一个示例数组(对于x值): [0.0,0.0,5.6,3.0,6.0,5.4,2.1,0.0,1.3,4.1,0.0],[5.2,0.0,3.2,7.0,8.9,0.0,5.0,0.0,0.0,4.6,0.0,0.0,0.0],[3.6,1.5,3.6,0.0,0.0,0.0,4.6,5.6,2.8,0] 对于y: [一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月] 我有以下代码在折线图中显示这3行:Swift 多重折线图,don';我不想绘制0值。斯威夫特2,swift,linechart,ios-charts,Swift,Linechart,Ios Charts,我正在使用ios图表库生成多个折线图。(danielgindi/Charts)。我正在为从核心数据检索的x-axsis创建一个数组,如果x周没有值,我将附加一个0 我有一个示例数组(对于x值): [0.0,0.0,5.6,3.0,6.0,5.4,2.1,0.0,1.3,4.1,0.0],[5.2,0.0,3.2,7.0,8.9,0.0,5.0,0.0,0.0,4.6,0.0,0.0,0.0],[3.6,1.5,3.6,0.0,0.0,0.0,4.6,5.6,2.8,0] 对于y: [一月、二月、
func setChart(xValues: [NSDate], valuesLineChart: [[Double]]) {
chartView.descriptionText = ""
chartView.noDataText = "You need to provide data for the chart."
var dataSets : [LineChartDataSet] = [LineChartDataSet]()
var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}
var yVals2 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i))
}
var yVals3 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
yVals3.append(ChartDataEntry(value: valuesLineChart[2][i], xIndex: i))
}
let set1 = LineChartDataSet(yVals: yVals1, label: nil)
let set2 = LineChartDataSet(yVals: yVals2, label: nil)
let set3 = LineChartDataSet(yVals: yVals3, label: nil)
set1.fillColor = UniversalStatic.data.colourArrayForGraph[0]
set2.fillColor = UniversalStatic.data.colourArrayForGraph[1]
set3.fillColor = UniversalStatic.data.colourArrayForGraph[2]
dataSets.append(set1)
dataSets.append(set2)
dataSets.append(set3)
set1.setColor(UniversalStatic.data.colourArrayForGraph[0])
set2.setColor(UniversalStatic.data.colourArrayForGraph[1])
set3.setColor(UniversalStatic.data.colourArrayForGraph[2])
set1.lineWidth = 2
set2.lineWidth = 2
set3.lineWidth = 2
set1.setCircleColor(UniversalStatic.data.colourArrayForGraph[0])
set2.setCircleColor(UniversalStatic.data.colourArrayForGraph[1])
set3.setCircleColor(UniversalStatic.data.colourArrayForGraph[2])
set1.drawCircleHoleEnabled = false
set2.drawCircleHoleEnabled = false
set3.drawCircleHoleEnabled = false
set1.circleRadius = 5.0
set2.circleRadius = 5.0
set3.circleRadius = 5.0
let data: CombinedChartData = CombinedChartData(xVals: xValues)
data.lineData = LineChartData(xVals: xValues, dataSets: dataSets)
chartView.data = data
}
func设置图表(xValues:[NSDate],valuesLineChart:[Double]]{
chartView.descriptionText=“”
chartView.noDataText=“您需要为图表提供数据。”
变量数据集:[LineChartDataSet]=[LineChartDataSet]()
变量yVals1:[ChartDataEntry]=[ChartDataEntry]()
对于0..中的i,是否希望完全跳过0.0值?可以在将其附加到数组之前进行检查
也许你能做到:
var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<xValues.count {
if valuesLineChart[0][i] != 0.0 {
yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i))
}
}
var yVals1:[ChartDataEntry]=[ChartDataEntry]()
对于0..中的i,唯一的方法是重写默认行为
实际上,创建LineChartRenderer
的子类并覆盖drawLinear
(行)、drawValues
(值呈现)和drawExtras
(圆)相当简单
只需在那里复制超类方法()的实现,并添加跳过零值所需的条件
然后将自定义渲染器指定给图表视图
另一个可能在不覆盖渲染器的情况下工作的选项是为每个值提供一种颜色。然后您可以只为零值设置清晰的颜色。是的,我希望完全跳过它。我正在考虑这一点,但我认为这不可行。例如[0.0,0.0,5.6]&[1月、2月、3月],如果我跳过了前2个,它会不会将5.6分配给Jan?好的,我知道你现在想要什么了…你想要在图表中使用换行符。我相信过去有开发人员要求为库提供此功能,但据我所知,你需要在换行符后隔离每一行,并将其作为新数据集实现…它是至少可以说,由于贝塞尔路径的绘制问题,变得复杂了。我现在不确定这是否可行。啊,好吧。我真的不想换行,只是在0.0值上没有显示圆并跳过它,就像将0改为零一样。你可能应该在
中使用贴图而不是。谢谢,我一般来说,我对编程不熟悉,但我会尝试一下。通过为每个值设置颜色,附加在0上的线不会仍然显示吗?理想情况下,对于0值,在它与线连接之前和之后的值。第二个选项有效吗?因为我对编程非常陌生,所以第一个选项似乎有点棘手我真的不知道从哪里开始。@JessMurray第二个只是一个想法,我不确定它是否适合您的用例。第一个是安全的,但需要更多的工作。