Swift5.0-Charts曲线图动态添加数据

第一步引入第三方库:https://github.com/danielgindi/Charts

我这里使用CocoaPods安装,把pod 'Charts'到您的Podfile中


第二步引用并创建相关UI


第三步新建一个swift来封装动态添加数据,我这里直接沾整个代码出来


importFoundation

importCharts

classLineChartManager{

    varlineChartView:LineChartView!

    varxAxis:Charts.XAxis!    //X轴

    varleftYAxis:Charts.YAxis!//左侧Y轴

    varrightYAxis:Charts.YAxis!//右侧Y轴

    vardataEntry:ChartDataEntry!

    varlineChartData:LineChartData!

    varlineDataSet:LineChartDataSet!

    varlineDataSets:Array = []



    //一条曲线

    init(_mLineChart:LineChartView,_name:String,_color:NSUIColor,_xAxismin:Double,_xAxismax:Double){

        self.lineChartView= mLineChart

        xAxis = lineChartView.xAxis

        leftYAxis = lineChartView.leftAxis

        rightYAxis = lineChartView.rightAxis

        initLineChart(xAxismin,xAxismax)

        initLineDataSet(name, color)

    }



    //多条曲线

    init(_mLineChart:LineChartView,_names:Array,_colors:Array,_xAxismin:Double,_xAxismax:Double){

        self.lineChartView= mLineChart

        xAxis = lineChartView.xAxis

        leftYAxis = lineChartView.leftAxis

        rightYAxis = lineChartView.rightAxis

        initLineChart(xAxismin,xAxismax)

        initLineDataSet(names, colors)

    }





    //初始化LineChar

    funcinitLineChart(_xAxismin:Double,_xAxismax:Double) {



        //设置交互样式

        lineChartView.scaleYEnabled = false //取消Y轴缩放

        lineChartView.doubleTapToZoomEnabled = false //双击缩放

        lineChartView.dragEnabled = false //启用拖动手势

        lineChartView.scaleXEnabled = false //禁止缩放





        letlegend =lineChartView.legend

        legend.horizontalAlignment = .right

        legend.verticalAlignment = .top

        legend.font=UIFont.systemFont(ofSize:16.0)





        //设置X轴样式

        xAxis.labelPosition = .bottom //X轴的显示位置,默认是显示在上面的

        xAxis.drawGridLinesEnabled = false //不绘制网格线

        xAxis.axisMinimum= xAxismin

        xAxis.axisMaximum= xAxismax

        //        xAxis.labelTextColor = UIColor.white //label文字颜色



        //设置Y轴样式

        leftYAxis.forceLabelsEnabled = false //不强制绘制指定数量的label

        rightYAxis.forceLabelsEnabled = false //不强制绘制指定数量的label

        leftYAxis.drawZeroLineEnabled = true //从0开始绘制

        rightYAxis.drawZeroLineEnabled = true //从0开始绘制

        leftYAxis.inverted = false //是否将Y轴进行上下翻转

        leftYAxis.labelPosition = .outsideChart//label位置

        leftYAxis.labelFont=UIFont.systemFont(ofSize:12.0)//文字字体

        rightYAxis.enabled = false

        //        leftYAxis!.labelTextColor = UIColor.red//文字颜色

        //        leftAxis.axisLineColor = UIColor.cyan//Y轴颜色



        //设置网格样式

        leftYAxis.drawGridLinesEnabled = false



    }





    //初始化一条曲线

    funcinitLineDataSet(_name:String,_color:NSUIColor) {

        vardataEntry = [ChartDataEntry]()

        letentry =ChartDataEntry.init(x:0, y:0)

        dataEntry.append(entry)

        lineDataSet=LineChartDataSet(entries: dataEntry, label: name)

        lineDataSet.drawCirclesEnabled = false //坐标点

        lineDataSet.mode = .horizontalBezier  //设置曲线是否平滑

        lineDataSet.drawValuesEnabled = false

        lineDataSet.colors= [color]



        //初始化数据

        lineChartData = LineChartData(dataSet: lineDataSet)

        lineChartView.data = lineChartData

    }



    //初始化多条曲线

    funcinitLineDataSet(_names:Array,_colors:Array) {

        vardataEntry = [ChartDataEntry]()

        letentry =ChartDataEntry.init(x:0, y:0)

        dataEntry.append(entry)

        foriin0..

            lineDataSet=LineChartDataSet(entries: dataEntry, label: names[i])

            lineDataSet.drawCirclesEnabled = false //坐标点

            lineDataSet.mode = .horizontalBezier  //设置曲线是否平滑

            lineDataSet.drawValuesEnabled = false

            lineDataSet.colors= [colors[i]]

            lineDataSets.append(lineDataSet)

        }

        //初始化数据

        lineChartData = LineChartData(dataSet: lineDataSet)

        lineChartView.data = lineChartData

    }



    //动态添加一条曲线数据

    funcaddEntry(number:Double){



        iflineDataSet.count==0{

            lineChartData.addDataSet(lineDataSet)

        }

        lineChartView.data = lineChartData



        letentry =ChartDataEntry(x:Double(lineDataSet.count), y:Double(number));

        lineChartData.addEntry(entry, dataSetIndex:0)

        //通知数据已经改变

        lineChartData.notifyDataChanged()

        lineChartView.notifyDataSetChanged()

    }



    //动态添加多条曲线数据

    funcaddEntry(numbers:Array){



        lineChartData = LineChartData(dataSets: lineDataSets)

        lineChartView.data = lineChartData

        foriin0..

            letentry =ChartDataEntry(x:Double(lineDataSet.count), y: numbers[i]);

            lineChartData.addEntry(entry, dataSetIndex: i)

        }

        //通知数据已经改变

        lineChartData.notifyDataChanged();

        lineChartView.notifyDataSetChanged()

    }



    //左Y轴自定义

    funcsetLeftYAxis(_min:Double,_max:Double,_setEnabled:Bool,_leftYAxisUnit:String){

        ifmax < min {

            return

        }

        leftYAxis.axisMinimum = min

        leftYAxis.axisMaximum = max

        leftYAxis.enabled= setEnabled

        letleftValueFormatter =NumberFormatter()  //自定义格式

        leftValueFormatter.positiveSuffix= leftYAxisUnit  //数字后缀单位

        lineChartView.leftAxis.valueFormatter=DefaultAxisValueFormatter.init(formatter: leftValueFormatter)

    }



    //右Y轴自定义

    funcsetrightYAxis(_min:Double,_max:Double,_setEnabled:Bool,_leftYAxisUnit:String){

        ifmax < min {

            return

        }

        rightYAxis.axisMinimum = min

        rightYAxis.axisMaximum = max

        rightYAxis.enabled= setEnabled

        letrightValueFormatter =NumberFormatter()  //自定义格式

        rightValueFormatter.positiveSuffix= leftYAxisUnit  //数字后缀单位

        lineChartView.rightAxis.valueFormatter=DefaultAxisValueFormatter.init(formatter: rightValueFormatter)

    }

}

最后再引用这个方法


    varlineChartManager:LineChartManager!

    varlineChartDate:Array = []  //数据集合

    varnames:Array = []  //折线名字集合

    varcolors:Array = []  //折线名字集合

    varname:String!

    varcolor:NSUIColor!

    overridefuncviewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.

        name="电流"

        color = NSUIColor.red

        lineChartManager = LineChartManager(lineChaertView, name, color, 0, 10)

        lineChartManager.setLeftYAxis(0, 40, true, String("A/V"))

        lineChartManager.setrightYAxis(0, 0, false, String())

        //多条

        //        names = ["电流","电压"]

        //        colors = [NSUIColor.red,NSUIColor.black]

        //        lineChartManager = LineChartManager(lineChaertView, names, colors, 0, 300)

        //        lineChartManager.setLeftYAxis(0, 40, true, String("A/V"))

        //        lineChartManager.setrightYAxis(0, 0, false, String())

        //        lineChartDate.append(10)

        //        lineChartDate.append(30)

        //        lineChartManager.addEntry(numbers: lineChartDate)

    }

    @IBActionfuncbuttons(_sender:UIButton) {

        letdata =Double(arc4random()%40)

        lineChartManager.addEntry(number: data)

    }

效果如下:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容