在danielgindi/Charts ios中显示真实的x轴值

3

我需要在ios中创建一条折线图,所以我搜索并发现 danielgindi/Charts 是使用最佳选项之一。

我开始使用它并绘制了图表,但我需要对 UI 进行一些更改。我试图给 danielgindi 的 LineChart 赋予我想要的外观,但我没有得到它。

我希望我提供的 x 轴值应该按原样反映,但它没有反映?

我想要绘制的图表:Line chart needed

我创建的图表:Line chart made using ios charts

需要更改的内容:

  1. 左轴值 -> 我尝试通过 lineChart.rightAxis.enabled = false 将其删除。它会删除 y 轴线(与 x 轴平行的线)。我想要有 y 轴线。

  2. 虚线轴线而不是实线。

  3. X 轴应正确显示值,而不是显示 Jan、jan、feb,而且还不正确。

  4. 需要删除黑色正方形框。

这是代码:

    override func viewDidLoad() {
        super.viewDidLoad()

        self.lineChart.delegate = self
        self.lineChart.chartDescription?.textColor = UIColor.white

        let months = ["Jan" , "Feb", "Mar"]
        let dollars1 = [1453.0,2352,5431]
        setChart(months, values: dollars1)
    }

    func setChart(_ dataPoints: [String], values: [Double]) {

        var dataEntries: [ChartDataEntry] = []

        for i in 0 ..< dataPoints.count {
            dataEntries.append(ChartDataEntry(x: Double(i), y: values[i]))
        }

        let lineChartDataSet = LineChartDataSet(values: dataEntries, label: nil)
        lineChartDataSet.axisDependency = .left
        lineChartDataSet.setColor(UIColor.black)
        lineChartDataSet.setCircleColor(UIColor.black) // our circle will be dark red
        lineChartDataSet.lineWidth = 1.0
        lineChartDataSet.circleRadius = 3.0 // the radius of the node circle
        lineChartDataSet.fillAlpha = 1
        lineChartDataSet.fillColor = UIColor.black
        lineChartDataSet.highlightColor = UIColor.white
        lineChartDataSet.drawCircleHoleEnabled = true

        var dataSets = [LineChartDataSet]()
        dataSets.append(lineChartDataSet)


        let lineChartData = LineChartData(dataSets: dataSets)
        lineChart.data = lineChartData
        lineChart.rightAxis.enabled = false
        lineChart.xAxis.drawGridLinesEnabled = false
        lineChart.xAxis.labelPosition = .bottom
        lineChart.xAxis.valueFormatter = IndexAxisValueFormatter(values: dataPoints)
    }

太棒了,你的代码帮了我很多忙。 - MK iOS
2个回答

1
在 Swift 3 中:

答案 1:

chartView.leftAxis.enabled = false

答案 4:
chartView.legend.enabled = false

1
每个日期都需要以字符串形式存储并添加到xvalues数组中。这是我的解决方法:
 override func viewDidLoad() {
    super.viewDidLoad()

    var xvalues: [String] = [String]()
    xvalues.append("3 Sept")
    xvalues.append("16 Sept")
    xvalues.append("15 Oct")
    xvalues.append("15 Oct")
    xvalues.append("15 Oct")

    let xAxis = lineChart.xAxis
    xAxis.labelPosition = .bothSided
    xAxis.axisMinimum = 0.0
    xAxis.granularity = 1.0

    lineChart.leftAxis.enabled = false
    lineChart.rightAxis.enabled = false
    lineChart.xAxis.valueFormatter = IndexAxisValueFormatter(values: xvalues)

    let data = generateLineData()
    lineChart.data = data


}

func generateLineData() -> LineChartData {
    let data: LineChartData = LineChartData()
    var entries: [ChartDataEntry] = []
    var dataArr: [Int] = []
    dataArr.append(10)
    dataArr.append(5)
    dataArr.append(8)
    dataArr.append(12)
    dataArr.append(10)

    for index in 0..<5 {
        entries.append(ChartDataEntry(x: Double(index),  y: Double(dataArr[index]) ) )
    }

    let set: LineChartDataSet = LineChartDataSet(values: entries, label: "My label")
    set.setCircleColor(UIColor.blue)
    set.lineWidth = 1
    set.circleRadius = 5
    set.drawCircleHoleEnabled = false
    set.valueTextColor = UIColor.blue
    set.valueFont = UIFont(name: "Verdana", size: 12.0)!
    set.drawFilledEnabled = true
    set.mode = Charts.LineChartDataSet.Mode.linear
    set.axisDependency = Charts.YAxis.AxisDependency.left

    data.addDataSet(set)

    return data
}

我尝试了你的东西。我遇到了一个问题,如果数据点太大,它们会超出左右轴。其次,有没有办法删除x轴线并放置y轴线。基本上,左侧轴应该从视图最左侧的部分开始偏移。 - Sudhanshu Gupta
如果字符串太长,你可以使用这个:"3 \n Sept" 将其分成两行。我建议为你提到的其他问题创建一个新的问题。但如果答案对你有帮助,请接受答案。 - DevB2F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接