EDIT简短版:我正在使用带有动态数据的ios图表来显示图形,并且正在将图形砍掉,因此图形的整个垂直部分无法正确显示。某些操作(例如从横向过渡到纵向或反之亦然)将导致图形正确显示。
原始问题
我正在使用ios-charts版本2.2.4在运行ios 9.3的iPhone 6模拟器上显示折线图,并且遇到了内容被垂直剪切的问题...有时。
该图表是向下钻取图表,通过在另一个图中选择一个数据点来触发。对于某些数据点,如果我首先选择它们,则向下钻取图表将被裁剪,如下所示:
但是,如果我先选择另一个数据点,然后重新选择刚剪切过的完全相同的数据点,则图表将按预期方式或多或少地呈现:
我手动设置图表的最大Y值,并打印最大Y值确认确实已设置,因此我认为问题不在于图表格式,而可能在于图表约束本身的看法?换句话说,也许这是布局/情节提要问题,并且可以在视图甚至父视图上设置一个属性以使其正确渲染吗?
尽管如此,以下是我用于生成图表的代码,以防万一我做任何明显错误的事情:
... // Part where I actually get the data omitted bc its boring
let chartDataSet = LineChartDataSet(yVals: dataEntries, label: "")
let chartData = LineChartData(xVals: xVals, dataSet: chartDataSet)
drilldownChart.data = chartData
formatChart(drilldownChart, yMax: [runningTotal, Double(goal.target)].maxElement()!)
chartDataSet.colors = [UIColor.blackColor()]
chartDataSet.circleColors = [UIColor.blackColor()]
chartDataSet.drawCirclesEnabled = false
chartDataSet.drawFilledEnabled = true
chartDataSet.fillColor = UIColor.blackColor()
chartDataSet.fillAlpha = 1.0
chartDataSet.valueColors = dataPointLabelColors
print(drilldownChart.chartYMax) // Still prints 66, y'know, just in case
// Format a chart by eliminating grid lines, decimals, right axis, etc.
func formatChart(chart: BarLineChartViewBase, yMax: Double) {
let formatter = NSNumberFormatter()
formatter.minimumFractionDigits = 0
chart.xAxis.labelPosition = .Bottom
chart.xAxis.gridColor = UIColor.clearColor()
chart.leftAxis.axisMinValue = 0.0
chart.leftAxis.valueFormatter = formatter
chart.leftAxis.granularity = 1 // Sets a minimum granularity, but allows for higher granularities
chart.leftAxis.axisMaxValue = [1.0, yMax * 1.1].maxElement()!
chart.leftAxis.gridColor = UIColor.clearColor()
chart.rightAxis.enabled = false
chart.legend.enabled = false
chart.data!.setValueFormatter(formatter)
if (chart.data!.xValCount > 20) { chart.data!.setDrawValues(false) }
chart.descriptionText = ""
chart.animate(xAxisDuration: 1.0, yAxisDuration: 1.0, easingOption: .Linear)
chart.pinchZoomEnabled = false
chart.doubleTapToZoomEnabled = false
let limit = ChartLimitLine(limit: Double(goal!.target), label: "")
limit.lineColor = UIColor.blackColor()
limit.lineDashLengths = [4.0, 2.0]
chart.leftAxis.addLimitLine(limit)
print(chart.leftAxis.axisMaxValue) // prints 66
print(chart.chartYMax) // Prints 66
}
EDIT情节提要设置被忽略,因为它们很大,而且结果不相关
答案是notifyDataSetChanged()
在绘图函数的末尾添加a 。
根据我在MPAndroid图表(Android版的ios-Charts)上找到的这份文档,
notifyDataSetChanged():让图表知道其基础数据已更改,并执行所有必要的重新计算(偏移量,图例,最大值,最小值等)。特别是在动态添加数据时,这是必需的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句