построение графиков синусов и косинусов с изломами - PullRequest
1 голос
/ 17 июня 2019

Я использую этот измененный код от другого пользователя для построения синуса и косинуса Графики iOS, волнистые линии

import UIKit
import Charts

class ViewController: UIViewController, ChartViewDelegate{

    var lineChartView: LineChartView!

    override func viewDidLoad() {


        lineChartView = LineChartView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
        lineChartView?.delegate = self
        self.view.addSubview(lineChartView!)

        let ys1 = Array(0..<10).map { x in return sin(Double(x)) }
        let ys2 = Array(0..<10).map { x in return cos(Double(x)) }

        let yse1 = ys1.enumerated().map { x, y in return ChartDataEntry(x: Double(x), y: y) }
        let yse2 = ys2.enumerated().map { x, y in return ChartDataEntry(x: Double(x), y: y) }

        let data = LineChartData()
        let ds1 = LineChartDataSet(entries: yse1, label: "Hello")
        ds1.colors = [NSUIColor.red]
        ds1.drawCirclesEnabled = false
        ds1.drawValuesEnabled = false
        ds1.mode = .cubicBezier
        data.addDataSet(ds1)

        let ds2 = LineChartDataSet(entries: yse2, label: "World")
        ds2.colors = [NSUIColor.blue]
        ds2.drawCirclesEnabled = false
        ds2.drawValuesEnabled = false
        ds2.mode = .cubicBezier
        data.addDataSet(ds2)
        self.lineChartView.data = data

        self.viewChart.gridBackgroundColor = NSUIColor.white

        self.lineChartView.chartDescription?.text = "Linechart Demo"
        }

Но мой график выглядит не очень хорошо, потому что, как вы видите, полученный гра имеет некоторые изгибы.

enter image description here

Что я могу сделать, чтобы сгладить график нелинейных функций? Заранее спасибо.

1 Ответ

2 голосов
/ 17 июня 2019

Здесь:

    let ys1 = Array(0..<10).map { x in return sin(Double(x)) }
    let ys2 = Array(0..<10).map { x in return cos(Double(x)) }

    let yse1 = ys1.enumerated().map { x, y in return ChartDataEntry(x: Double(x), y: y) }
    let yse2 = ys2.enumerated().map { x, y in return ChartDataEntry(x: Double(x), y: y) }

Вы используете только 10 значений. Не удивительно, что кривая не гладкая. Даже если вы делаете ds1.mode = .cubicBezier, но библиотека Charts может сделать для вас столько сглаживания. Эта строка не волшебное заклинание.

Чтобы сделать кривую более гладкой, мы можем использовать больше значений sin (x) и cos (x), которые находятся ближе друг к другу. Вместо 10 давайте использовать 100 значений от 0 до 10 с шагом 0,1 каждый раз.

let ys1 = Array(0..<100).map { x in ChartDataEntry(x: Double(x) / 10, y: sin(Double(x) / 10)) }
let ys2 = Array(0..<100).map { x in ChartDataEntry(x: Double(x) / 10, y: cos(Double(x) / 10)) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...