MPAndroidCahrt_linechart折线图实现读取本地文件生成曲线

news2024/9/22 13:25:17

目录

        • 标题(Description)设置
        • 图例(Legend)设置(部分和标题一样的没写)
        • X轴(XAxis)设置(上面有的属性不再写了)
        • 数据源(LineData)设置
      • MainActivity 注释部分可以删掉,看需不需要

效果如下,目前实现基本的读取数据生成曲线,可以正常运行
还有很多bug,比如生成一个数据在生成另一个数据曲线会变乱,不会做时间X轴数据,标题位置的问题,现在还没有解决方法
在这里插入图片描述

在这里插入图片描述
用到的知识点:
参考原博客

标题(Description)设置

属性 注解
setEnabled() 是否启用标题
setText() 设置标题的文本
setTextSize() 设置文本大小
setTypeface() 设置文本字体样式
setTextColor() 设置文本颜色
setXOffset() 设置X轴的偏移量,float值
setYOffset() 设置Y轴的偏移量,float值
setPosition() 设置标题X和Y轴的偏移量
lineChart.setDescription() 添加给LineChart

如图:
在这里插入图片描述

图例(Legend)设置(部分和标题一样的没写)

属性 注解
setPosition(LegendPosition.BELOW_CHART_LEFT) 设置图例的位置在图表的 左下角
getLegend() 获取Legend对象
setFormSize() 设置图例大小
setOrientation() 设置多个图例的排列方式
setForm() 设置图例的样式,如圆形、线形
setDrawInside() 是否将图例绘制在内部,bool值
setFormToTextSpace() 设置文本距离图例的距离,float值
setVerticalAlignment() 设置图例在垂直方向上的排列方式,LegendVerticalAlignment枚举值
setHorizontalAlignment() 设置图例在水平方向上的排列方式,LegendHorizontalAlignment枚举值
setDirection 设置多个图例从什么方向开始绘制,如从左向右

X轴(XAxis)设置(上面有的属性不再写了)

属性 注解
setDrawGridLines() 是否绘制网格线(横向的线)
setGridLineWidth() 设置网格线的宽度
setGridColor() 设置网格线的颜色
setDrawAxisLine() 是否绘制靠近X轴的第一条线,设置xAxis.setDrawGridLines(false)才有效果
setAxisLineWidth() 设置靠近X轴的第一条线的宽度
setAxisLineWidth() 设置靠近X轴的第一条线的颜色
setPosition() 设置X轴的文本描述是否绘制在内侧
setDrawLabels() 是否绘制左侧的描述文字
setAxisMaximum() 设置X轴的最大值
setAxisMinimum() 设置X轴的最小值
setGranularity() 设置X轴每两个值之间的间隔
setGranularityEnabled() 是否启用间隔
setInverted() 设置是否倒序拍立
setValueFormatter() 数据展示:自定义格式,通过实现接口IAxisValueFormatter
setXOffset() 设置相对于X轴的偏移量(一般都会加点偏移量,以免第一个数据显示不全)
setYOffset() 设置相对于Y轴的偏移量
setCenterAxisLabels() 是否使文字在中间对齐
setLabelCount() 设置展示的个数,第二个参数如果设置为true表示将强制设置标签计数,这意味着指定的标签数将沿轴绘制并均匀分布-这可能会导致标签参差不齐
setPosition()
setPosition(XAxis.XAxisPosition.BOTTOM) 设置X所在的位置,可取值:TOP(默认值):位于上方,TOP_INSIDE:位于上方并绘制在图形内部,BOTTOM:位于下方,BOTTOM_INSIDE:位于下方并绘制在图形内部,BOTH_SIDED:上下两边都显示轴
setLabelRotationAngle() 设置旋转的角度,float值
getAxisLeft() 获取左边的YAxis对象
getAxisRight() 获取右边的YAxis对象

数据源(LineData)设置

属性 注解
setColor() 设置线条颜色
setCircleColor() 一次性设置所有圆点的颜色
setLineWidth() 设置线条的宽度
setCircleRadius() 设置圆点的半径大小
setDrawCircleHole() 设置是否为空心圆
setCircleColorHole() 设置空心圆心的颜色,注意该属性只有在setDrawCircleHole为true的时候才有效果
setDrawCircles() 是否绘制圆点,若为false则表示只有折线
是否绘制圆点,若为false则表示只有折线 设置在曲线下方填充的颜色(阴影的颜色)
setDrawFilled() 是否在线条下方设置填充,bool类型
setMode() 用于设置线条的类型,Mode枚举值,如Mode.CUBIC_BEZIER表示贝塞尔曲线
setAxisDependency() 设置线条是参照左边的y轴还是右边的y轴,在绘制组合图的时候用到,AxisDependency枚举值

以上属性用法都是先获取对象再去设置属性
比如

description = new Description();
description.setEnabled(true);//设置是否启用标题
description.setText("测试时间-电压-电流曲线");//设置标题文本
XAxis xAxis = mLineChart.getXAxis();//得到x轴
xAxis.setDrawAxisLine(true);//是否绘制轴线
xAxis.setDrawGridLines(true);//设置x轴上每个点对应的线
xAxis.setDrawLabels(true);//绘制标签  指x轴上的对应数值

下面贴上我的代码,我的代码读取三个不同的文件:
1、打开三行数据的本地csv文件
2、打开四行数据的本地csv文件
3、打开两行数据的txt本地文件
目前不会做时间X轴先用索引值代替

第一个数据类
三行数据的本地csv文件,BatteryData 类

package com.example.linechart;

import java.util.ArrayList;
import java.util.List;

// csv文件内容为 测试时间(String) 电压(double) 电流(double)
public class BatteryData {
   

    long   mIndex;          // 序号
    String mTestDateTime;   // 测试记录点日期时间
    double mVolt;           // 电压(double)
    double mCurrent;        // 电流(double)

    private List<BatteryData> mBatteryDataList = new ArrayList<>();
    public BatteryData() {
   
    }

    public BatteryData(long index, String testDateTime, double volt, double current) {
   
        mIndex = index;
        mTestDateTime = testDateTime;
        mVolt = volt;
        mCurrent = current;
    }

    public long getIndex() {
   
        return mIndex;
    }

    public void setIndex(long index) {
   
        mIndex = index;
    }

    public String getTestDateTime() {
   
        return mTestDateTime;
    }

    public void setTestDateTime(String testDateTime) {
   
        mTestDateTime = testDateTime;
    }

    public double getVolt() {
   
        return mVolt;
    }

    public void setVolt(double volt) {
   
        mVolt = volt;
    }

    public double getCurrent() {
   
        return mCurrent;
    }

    public void setCurrent(double current) {
   
        mCurrent = current;
    }

    @Override
    public String toString() {
   
        return "mIndex=" + mIndex +
                ", mTestDateTime='" + mTestDateTime + '\'' +
                ", mVolt=" + mVolt +
                ", mCurrent=" + mCurrent +
                '}';
    }
}

第二个数据类
四行数据的本地csv文件,TemperatureData

package com.example.linechart;

public class TemperatureData {
   
    int mIndex;          // 序号
    double Auxiliarytemperature1;           // 辅助温度(double)
    double Auxiliarytemperature2;
    double Auxiliarytemperature3;
    double Auxiliarytemperature4;

    public TemperatureData() {
   
    }

    public TemperatureData(int index, double auxiliarytemperature1, double auxiliarytemperature2, double auxiliarytemperature3, double auxiliarytemperature4) {
   
        mIndex = index;
        Auxiliarytemperature1 = auxiliarytemperature1;
        Auxiliarytemperature2 = auxiliarytemperature2;
        Auxiliarytemperature3 = auxiliarytemperature3;
        Auxiliarytemperature4 = auxiliarytemperature4;
    }

    public int getIndex() {
   
        return mIndex;
    }

    public void setIndex(int index) {
   
        mIndex = index;
    }

    public double getAuxiliarytemperature1() {
   
        return Auxiliarytemperature1;
    }

    public void setAuxiliarytemperature1(double auxiliarytemperature1) {
   
        Auxiliarytemperature1 = auxiliarytemperature1;
    }

    public double getAuxiliarytemperature2() {
   
        return Auxiliarytemperature2;
    }

    public void setAuxiliarytemperature2(double auxiliarytemperature2) {
   
        Auxiliarytemperature2 = auxiliarytemperature2;
    }

    public double getAuxiliarytemperature3() {
   
        return Auxiliarytemperature3;
    }

    public void setAuxiliarytemperature3(double auxiliarytemperature3) {
   
        Auxiliarytemperature3 = auxiliarytemperature3;
    }

    public double getAuxiliarytemperature4() {
   
        return Auxiliarytemperature4;
    }

    public void setAuxiliarytemperature4(double auxiliarytemperature4) {
   
        Auxiliarytemperature4 = auxiliarytemperature4;
    }

    @Override
    public String toString() {
   
        return "辅助温度曲线:" +
                "索引值为:" + mIndex +
                ", 辅助温度1为:" + Auxiliarytemperature1 +
                ", 辅助温度2为:" + Auxiliarytemperature2 +
                ", 辅助温度3为:" + Auxiliarytemperature3 +
                ", 辅助温度4为:" + Auxiliarytemperature4 ;
    }
}

第三个类
两行数据的txt本地文件

package com.example.linechart;

public class TextData {
   
    String mTestDateTime;   // 测试记录点日期时间
    double mVolt;           // 电压(double)
    public TextData() {
   
    }

    public String getTestDateTime() {
   
        return mTestDateTime;
    }

    public void setTestDateTime(String testDateTime) {
   
        mTestDateTime = testDateTime;
    }

    public double getVolt() {
   
        return mVolt;
    }

    public void setVolt(double volt) {
   
        mVolt = volt;
    }

    public TextData(String testDateTime, double volt) {
   
        mTestDateTime = testDateTime;
        mVolt = volt;
    }

    @Override
    public String toString() {
   
        return "测试时间-电压曲线数据:" +
                "测试时间为:" + mTestDateTime + '\'' +
                ", 测试电压为:" + mVolt +
                '}';
    }
}

activity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/lineChart"
        android:layout_width="match_parent"
        android:layout_height="500dp">

    </com.github.mikephil.charting.charts.LineChart>

    <Button
        android:id="@+id/threeCsvButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="打开三行csv本地数据文件" />
    <Button
        android:id="@+id/fourCsvButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/824134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(二)创建streamlit的第一个应用

1 前言 &#x1f4e3; 重要通知&#xff01;在我之前的博客中&#xff0c;曾经介绍过Streamlit的安装方法和初步应用。如果你还没有参阅过&#xff0c;请先阅读这篇文章&#xff0c;它为我们接下来的探索铺垫了基础。&#x1f50d;&#x1f60a; (一) 初识Streamlit——安装以…

Nodejs 第二章(安装)

安装nodejs 访问官网 en https://nodejs.org/en cn http://www.nodejs.com.cn/ LTS 长期支持版 Current 尝鲜版 选择自己的操作系统 windows Mac Linux windows需要区分64位和32位 Mac需要区分64位还是ARM芯片 Linux同上。 其中msi 和 pkg 可以直接安装较为简单 Mac Pkg wi…

小型双轮差速底盘寻迹功能的实现

1. 功能说明 寻迹机器人是一种能够跟踪特定物体或线路的机器人。它们通常具有以下功能和特点&#xff1a; ① 传感器&#xff1a;寻迹机器人配备了用于感知环境的传感器&#xff0c;如摄像头、灰度传感器等。这些传感器可以探测地面上的标记、颜色、纹理或其他特定特征&#xf…

Vue3和TypeScript项目-移动端兼容

1 全局安装typescript 2 检测安装成功 3 写的是ts代码&#xff0c;但是最后一定要变成js代码&#xff0c;才能在浏览器使用 这样就会多一个js文件 3 ts语法 数组语法 对象语法 安装vue3项目 成功后进入app。安装依赖。因为我们用的是脚手架&#xff0c;要引入东西的时候不需要…

网格简化(QEM)学习笔记

文章目录 网格简化(QEM)1 概述与原理1.1 网格简化的应用1.2 常见的简化操作1.3 二次误差度量 2 算法流程2.1 逐步分析 3 Python代码实现3.1 测试结果 4 总结参考 网格简化(QEM) 1 概述与原理 网格简化&#xff0c;通过减少复杂网格数据的顶点、边和面的数量简化模型的表达&am…

MIT 6.S081 Lab Ten -- mmap

MIT 6.S081 Lab Ten -- mmap 引言mmap(hard)代码解析 引言 本文为 MIT 6.S081 2020 操作系统 实验十解析。 MIT 6.S081课程前置基础参考: 基于RISC-V搭建操作系统系列 mmap(hard) map和munmap系统调用允许UNIX程序对其地址空间进行详细控制。它们可用于在进程之间共享内存&a…

SOLIDWORKS Flow Simulation可以便捷的进行降压分析

导读&#xff1a;现如今压降等应用的工程分析一直是由分析部门的专家执行&#xff0c;这些部门独立于主流设计和开发部门&#xff0c;或者仅为一些重要产品制造昂贵的物理原型。要测试或验证其设计&#xff0c;机械工程师必须依赖于创建物理原型并在工作台或测试台上对其进行测…

【Maven】Nexus3上传maven依赖jar

后端依赖 上次说到前端的批量tgz文件上传私服&#xff0c;其实服务端也有类似情况&#xff0c;我们有个私服也需要进行上传到私服&#xff0c;这里做个记录。因为上次有个小细节没注意白白传错了一遍&#xff0c;这里重新记录总结一下。 # 查看一下结构 $ tree -L 2 . |-- re…

春秋云镜 CVE-2021-32305

春秋云镜 CVE-2021-32305 WebSVN RCE 靶标介绍 WebSVN是一个基于Web的Subversion Repository浏览器&#xff0c;可以查看文件或文件夹的日志&#xff0c;查看文件的变化列表等。其search.php?search 参数下过滤不严谨导致RCE。 启动场景 漏洞利用 EXP PAYLOAD "/bi…

快速消除视频的原声的技巧分享

网络上下载的视频都会有视频原声或者背景音乐&#xff0c;如果不喜欢并且想更换新的BGM要怎么操作呢&#xff1f;今天小编就来教你如何快速给多个视频更换新的BGM&#xff0c;很简单&#xff0c;只需要将原视频的原声快速消音同时添加新的背景音频就行&#xff0c;一起来看看详…

express学习笔记3 - 三大件

便于统一管理router&#xff0c;创建 router 文件夹&#xff0c;创建 router/index.js&#xff1a; const express require(express)// 注册路由 const router express.Router() router.get(/,function(req,res){res.send(让我们开始express之旅) }) /*** 集中处理404请求的…

2023 全国大学生电子设计竞赛题目

2021 全国大学生电子设计竞赛题目 目录 1&#xff08;A题&#xff09;单相逆变器并联运行系统2 &#xff08;B题&#xff09;同轴电缆长度与终端负载检测装置3 &#xff08;C题&#xff09;电感电容测量装置4 &#xff08;D题&#xff09;信号调制方式识别与参数估计装置5 &am…

数据库访问中间件--springdata-jpa的基本使用

二、单表SQL操作-使用关键字拼凑方法 回顾 public interface UserRepository extends JpaRepository<User,Integer> {User findByUsernameLike(String username); }GetMapping("/user/username/{username}")public Object findUserByUsername(PathVariable S…

软考A计划-系统集成项目管理工程师-项目沟通管理-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

C语言进阶——文件的读写(文件使用方式、文件的顺序读写、常用函数、fprintf、fscanf)

目录 文件使用方式 文件的顺序读写 常用函数 用法示例 fprintf fscanf 文件使用方式 在fopen函数中详细的各种使用方式&#xff1a; 文件使用方式含义如果指定文件不存在“r”&#xff08;只读&#xff09;为了输入数据&#xff0c;打开一个已经存在的文本文件出错“w”…

2023牛客暑期多校训练营5-I The Yakumo Family

2023牛客暑期多校训练营5-I The Yakumo Family https://ac.nowcoder.com/acm/contest/57359/I 文章目录 2023牛客暑期多校训练营5-I The Yakumo Family题意解题思路代码 题意 解题思路 考虑将序列拆位计算。 先考虑一个简化版本&#xff0c;求&#xff1a; ∑ 1 ≤ l 1 ≤…

新闻标题文本分类任务

目录 知识回顾使用debug调试 知识回顾 预处理内容 文本主要进行清洗、分词/分字 ID替换(不希望计算机看到文字&#xff0c;而是ID)&#xff0c;通过语料表来表示&#xff0c;根据频率高低来分配ID号 文本的ID映射到文本的一个特征向量&#xff0c;进行词嵌入(Embedding)&…

【docker】Windows11系统下安装并配置阿里云镜像加速

【docker】Windows11系统下安装并配置阿里云镜像加速 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【docker】Windows11系统下安装并配置阿里云镜像加速一、查看Windows环境是否支持docker二、 启动Hyper-V三、 官网下载安装Docker应用和数据…

VIOOVI分享:什么是丰田精益生产方式?丰田精益生产方式有哪些?

作为全球知名的汽车生产企业&#xff0c;日本丰田在行业的影响力巨大。而其企业运营模式&#xff0c;也广为经营领域热议&#xff0c;其中&#xff0c;大家对丰田精益生产方式一直都是津津乐道。那么什么是丰田精益生产方式&#xff1f;以下内容为您全面解析。 丰田精益化生产模…

数据结构 | 线性数据结构——双端队列

目录 一、何谓双端队列 二、双端队列抽象数据类型 三、用Python实现双端队列 四、回文检测器 一、何谓双端队列 双端队列是与队列类似的有序集合。它有一前、一后两端&#xff0c;元素在其中保持自己的位置。与队列不同的是&#xff0c;双端队列对在哪一端添加和移除元素没…