精华内容
下载资源
问答
  • lineChart
    千次阅读
    2021-03-17 18:31:59

    Line Chart

    折线图或折线图将信息显示为由直线段连接的一系列数据点(标记)。 折线图显示数据如何以相等的时间频率变化。

    以下是描绘不同年份学校数量的折线图。

    f71ef7a00e65c48f6574491ee5d9d606.png

    在JavaFX中,折线图由名为LineChart的类表示。 该类属于包javafx.scene.chart 。 通过实例化此类,您可以在JavaFX中创建LineChart节点。

    生成折线图的步骤

    要在JavaFX中生成折线图,您应该按照下面给出的步骤操作。

    第1步:创建一个类

    创建一个Java类并继承包javafx.application的Application类。 然后,您可以按如下方式实现此类的start()方法。public class ClassName extends Application {

    @Override

    public void start(Stage primaryStage) throws Exception {

    }

    }

    第2步:定义轴

    定义折线图的X和Y轴并为其设置标签。

    在我们的例子中,X轴代表从1960年到2020年的年份,每十年有一个主要的刻度线。//Defining X axis

    NumberAxis xAxis = new NumberAxis(1960, 2020, 10);

    xAxis.setLabel("Years");

    //Defining y axis

    NumberAxis yAxis = new NumberAxis(0, 350, 50);

    yAxis.setLabel("No.of schools");

    第3步:创建折线图

    通过实例化包javafx.scene.chart名为LineChart的类来创建折线图。 对于此类的构造函数,传递表示在上一步中创建的X轴和Y轴的对象。LineChart linechart = new LineChart(xAxis, yAxis);

    第4步:准备数据

    实例化XYChart.Series类。 然后将数据(一系列,x和y坐标)添加到此类的Observable列表中,如下所示 -XYChart.Series series = new XYChart.Series();

    series.setName("No of schools in an year");

    series.getData().add(new XYChart.Data(1970, 15));

    series.getData().add(new XYChart.Data(1980, 30));

    series.getData().add(new XYChart.Data(1990, 60));

    series.getData().add(new XYChart.Data(2000, 120));

    series.getData().add(new XYChart.Data(2013, 240));

    series.getData().add(new XYChart.Data(2014, 300));

    第5步:将数据添加到折线图

    将上一步骤中准备的数据系列添加到折线图中,如下所示 -//Setting the data to Line chart

    linechart.getData().add(series);

    第6步:创建组对象

    在start()方法中,通过实例化名为Group的类来创建组对象。 这属于包javafx.scene 。

    将在上一步中创建的LineChart(node)对象作为参数传递给Group类的构造函数。 这应该是为了将它添加到组中,如下所示 -Group root = new Group(linechart);

    第7步:创建场景对象

    通过实例javafx.scene为Scene的类来创建一个Scene,该类属于包javafx.scene 。 在此类中,传递在上一步中创建的Group对象( root )。

    除了根对象之外,您还可以传递两个表示屏幕高度和宽度的双参数以及Group类的对象,如下所示。Scene scene = new Scene(group ,600, 300);

    第8步:设置舞台的标题

    您可以使用Stage类的setTitle()方法将标题设置为Stage 。 primaryStage是一个Stage对象,它作为参数传递给场景类的start方法。

    使用primaryStage对象,将场景标题设置为Sample Application ,如下所示。primaryStage.setTitle("Sample Application");

    第9步:将场景添加到舞台

    您可以使用名为Stage的类的方法setScene()将Scene对象添加到Stage 。 使用此方法添加前面步骤中准备的Scene对象,如下所示。primaryStage.setScene(scene);

    第10步:显示舞台的内容

    使用Stage类的名为show()的方法show()场景的内容,如下所示。primaryStage.show();

    第11步:启动应用程序

    通过从main方法调用Application类的静态方法launch()来启动JavaFX应用程序,如下所示。public static void main(String args[]){

    launch(args);

    }

    例子 (Example)

    下表描述了1970年至2014年期间某地区的学校数量。年学校数量

    197015

    198030

    199060

    2000120

    2013240

    2014300

    以下是一个Java程序,它使用JavaFX生成描绘上述数据的折线图。

    将此代码保存在名为LineChartExample.java的文件中。import javafx.application.Application;

    import javafx.scene.Group;

    import javafx.scene.Scene;

    import javafx.stage.Stage;

    import javafx.scene.chart.LineChart;

    import javafx.scene.chart.NumberAxis;

    import javafx.scene.chart.XYChart;

    public class LineChartExample extends Application {

    @Override

    public void start(Stage stage) {

    //Defining the x axis

    NumberAxis xAxis = new NumberAxis(1960, 2020, 10);

    xAxis.setLabel("Years");

    //Defining the y axis

    NumberAxis yAxis = new NumberAxis (0, 350, 50);

    yAxis.setLabel("No.of schools");

    //Creating the line chart

    LineChart linechart = new LineChart(xAxis, yAxis);

    //Prepare XYChart.Series objects by setting data

    XYChart.Series series = new XYChart.Series();

    series.setName("No of schools in an year");

    series.getData().add(new XYChart.Data(1970, 15));

    series.getData().add(new XYChart.Data(1980, 30));

    series.getData().add(new XYChart.Data(1990, 60));

    series.getData().add(new XYChart.Data(2000, 120));

    series.getData().add(new XYChart.Data(2013, 240));

    series.getData().add(new XYChart.Data(2014, 300));

    //Setting the data to Line chart

    linechart.getData().add(series);

    //Creating a Group object

    Group root = new Group(linechart);

    //Creating a scene object

    Scene scene = new Scene(root, 600, 400);

    //Setting title to the Stage

    stage.setTitle("Line Chart");

    //Adding scene to the stage

    stage.setScene(scene);

    //Displaying the contents of the stage

    stage.show();

    }

    public static void main(String args[]){

    launch(args);

    }

    }

    使用以下命令从命令提示符编译并执行保存的java文件。javac LineChartExample.java

    java LineChartExample

    执行时,上述程序生成一个显示折线图的JavaFX窗口,如下所示。

    5b661b26c4e1ae80a763abc3e96ca316.png

    更多相关内容
  • KLineChart样本KLineChart( )示例代码。 包含多个前端框架版本。跑步React cd react-sample && npm install && npm run startVue cd vue-sample && npm install && npm run start角度的 cd ng-sample && npm ...
  • 主要为大家详细介绍了Android LineChart绘制多条曲线的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • KLineChart.zip

    2020-08-05 08:57:42
    KLineChart,Android仿火币K线图实现(包含MA,BOLL,MACD,KDJ,RSI,WR指标),博客附件,效果请查看博客相对应项目。
  • 实现了折线图的实时动态更新,可以自定义X轴坐标,可是设置Y坐标的最大值和最小值,android 绘制折线图(AChartEngine)Linechart 动态更新横轴为获取的当前时间
  • LineChart-master.zip,LineChart-master,.gitignore,.project,README.md,bin,AndroidManifest.xml,dexedLibs,android-support-v4-797b57028a0e7d0ee6c24fa54f0a9965.jar,res,crunch,drawable-hdpi,ic_launcher.png,...
  • 技术指标 技术指标。 从 klinecharts v6.1.0 开始,图表和技术指标不再分库。 此库仅适用于 kinecharts v5.3.0 - v6.0.5 安装 npm install klinecharts-technical-indicator 分类 移动平均线 SMA(简单移动平均线)...
  • LineChart 一个简单的拆线图
  • KLineChart :chart_increasing_with_yen: :chart_increasing:使用html5画布构建的轻量级K线图。 :package:安装 使用npm npm install klinecharts --save 使用纱 yarn add klinecharts CDN :page_facing_up:...
  • 今天来记录一下LineChart(折线图)的详细使用(美化)! 注:本人使用的版本是MPAndroidChart-v3.0.3(如若版本不同有某些方法更新,可在评论区留言,尽我所能帮你解决!) 上一篇文章讲了折线图的简单使用,这篇...
  • A181211908-24733.rar,ios-linechart-master,.DS_Store,ios-linechart,ios-linechart-Prefix.pch,.DS_Store,LineChartView.h,ChartViewController.h,LineChartView.m,en.lproj,MainStoryboard.storyboard,InfoPlist....
  • Android-LineChart 介绍 一个简单的折线,贝塞尔曲线图表控件,高度可扩展,支持动态显示。 效果图 使用 设置布局 2. 添加数据 ```Java lineChartView.setData(datas); 修改Y轴标尺间隔 lineChartView....
  • KLineChart.7z,Library,KLineChart.h,KLine.dll,KLine.lib,KLineu.dll,KLineu.lib,clean.bat,Samples,KLineDemo,resource.h,KLineDemo.ncb,KLineDemo.suo,KLineDemo.opt,KLineDemo.ico,ReadMe.txt,KLineDemo.dsw,...
  • Html5 line chart

    2015-09-29 10:53:26
    html5 不错的动态图,大家分享一下。
  • 此代码演示了在不使用任何第三方库的情况下构建自己的折线图的方法。 它包含一个简单而有效的算法,通过一组... 我不建议您将LineChart.swift直接导入到项目中,因为它仅用于演示目的。 但是,您应该根据需要进行修改。
  • 显示效果MPAndroidChart每一种图表的基本使用方式都基本相同 了解一种图表的实现 参考项目源码其他的图表也就差不多哩在布局文件中定义android:id="@+id/lineChart"android:layout_width="match_parent"android:...

    显示效果

    MPAndroidChart每一种图表的基本使用方式都基本相同 了解一种图表的实现 参考项目源码其他的图表也就差不多哩

    在布局文件中定义

    android:id="@+id/lineChart"

    android:layout_width="match_parent"

    android:layout_height="300dp"

    android:background="#ffffff"

    android:layout_margin="16dp"/>

    2.绑定view 设置LineChart显示属性

    LineChart lineChart= (LineChart) findViewById(R.id.lineChart);

    //创建描述信息

    Description description =new Description();

    description.setText("测试图表");

    description.setTextColor(Color.RED);

    description.setTextSize(20);

    lineChart.setDescription(description);//设置图表描述信息

    lineChart.setNoDataText("没有数据熬");//没有数据时显示的文字

    lineChart.setNoDataTextColor(Color.BLUE);//没有数据时显示文字的颜色

    lineChart.setDrawGridBackground(false);//chart 绘图区后面的背景矩形将绘制

    lineChart.setDrawBorders(false);//禁止绘制图表边框的线

    //lineChart.setBorderColor(); //设置 chart 边框线的颜色。

    //lineChart.setBorderWidth(); //设置 chart 边界线的宽度,单位 dp。

    //lineChart.setLogEnabled(true);//打印日志

    //lineChart.notifyDataSetChanged();//刷新数据

    //lineChart.invalidate();//重绘

    3.绑定数据

    /**

    * Entry 坐标点对象 构造函数 第一个参数为x点坐标 第二个为y点

    */

    ArrayList values1 = new ArrayList<>();

    ArrayList values2 = new ArrayList<>();

    values1.add(new Entry(4,10));

    values1.add(new Entry(6,15));

    values1.add(new Entry(9,20));

    values1.add(new Entry(12,5));

    values1.add(new Entry(15,30));

    values2.add(new Entry(3,110));

    values2.add(new Entry(6,115));

    values2.add(new Entry(9,130));

    values2.add(new Entry(12,85));

    values2.add(new Entry(15,90));

    //LineDataSet每一个对象就是一条连接线

    LineDataSet set1;

    LineDataSet set2;

    //判断图表中原来是否有数据

    if (lineChart.getData() != null &&

    lineChart.getData().getDataSetCount() > 0) {

    //获取数据1

    set1 = (LineDataSet) lineChart.getData().getDataSetByIndex(0);

    set1.setValues(values1);

    set2= (LineDataSet) lineChart.getData().getDataSetByIndex(1);

    set2.setValues(values2);

    //刷新数据

    lineChart.getData().notifyDataChanged();

    lineChart.notifyDataSetChanged();

    } else {

    //设置数据1 参数1:数据源 参数2:图例名称

    set1 = new LineDataSet(values1, "测试数据1");

    set1.setColor(Color.BLACK);

    set1.setCircleColor(Color.BLACK);

    set1.setLineWidth(1f);//设置线宽

    set1.setCircleRadius(3f);//设置焦点圆心的大小

    set1.enableDashedHighlightLine(10f, 5f, 0f);//点击后的高亮线的显示样式

    set1.setHighlightLineWidth(2f);//设置点击交点后显示高亮线宽

    set1.setHighlightEnabled(true);//是否禁用点击高亮线

    set1.setHighLightColor(Color.RED);//设置点击交点后显示交高亮线的颜色

    set1.setValueTextSize(9f);//设置显示值的文字大小

    set1.setDrawFilled(false);//设置禁用范围背景填充

    //格式化显示数据

    final DecimalFormat mFormat = new DecimalFormat("###,###,##0");

    set1.setValueFormatter(new IValueFormatter() {

    @Override

    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {

    return mFormat.format(value);

    }

    });

    if (Utils.getSDKInt() >= 18) {

    // fill drawable only supported on api level 18 and above

    Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);

    set1.setFillDrawable(drawable);//设置范围背景填充

    } else {

    set1.setFillColor(Color.BLACK);

    }

    //设置数据2

    set2=new LineDataSet(values2,"测试数据2");

    set2.setColor(Color.GRAY);

    set2.setCircleColor(Color.GRAY);

    set2.setLineWidth(1f);

    set2.setCircleRadius(3f);

    set2.setValueTextSize(10f);

    //保存LineDataSet集合

    ArrayList dataSets = new ArrayList<>();

    dataSets.add(set1); // add the datasets

    dataSets.add(set2);

    //创建LineData对象 属于LineChart折线图的数据集合

    LineData data = new LineData(dataSets);

    // 添加到图表中

    lineChart.setData(data);

    //绘制图表

    lineChart.invalidate();

    到这一步图表就可以显示出来了 默认的效果表示不是很美丽 下面设置一下各种显示效果

    4.设置X轴的显示效果

    //获取此图表的x轴

    XAxis xAxis = lineChart.getXAxis();

    xAxis.setEnabled(true);//设置轴启用或禁用 如果禁用以下的设置全部不生效

    xAxis.setDrawAxisLine(true);//是否绘制轴线

    xAxis.setDrawGridLines(true);//设置x轴上每个点对应的线

    xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值

    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴的显示位置

    //xAxis.setTextSize(20f);//设置字体

    //xAxis.setTextColor(Color.BLACK);//设置字体颜色

    //设置竖线的显示样式为虚线

    //lineLength控制虚线段的长度

    //spaceLength控制线之间的空间

    xAxis.enableGridDashedLine(10f, 10f, 0f);

    // xAxis.setAxisMinimum(0f);//设置x轴的最小值

    // xAxis.setAxisMaximum(10f);//设置最大值

    xAxis.setAvoidFirstLastClipping(true);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘

    xAxis.setLabelRotationAngle(10f);//设置x轴标签的旋转角度

    // 设置x轴显示标签数量 还有一个重载方法第二个参数为布尔值强制设置数量 如果启用会导致绘制点出现偏差

    // xAxis.setLabelCount(10);

    // xAxis.setTextColor(Color.BLUE);//设置轴标签的颜色

    // xAxis.setTextSize(24f);//设置轴标签的大小

    // xAxis.setGridLineWidth(10f);//设置竖线大小

    // xAxis.setGridColor(Color.RED);//设置竖线颜色

    // xAxis.setAxisLineColor(Color.GREEN);//设置x轴线颜色

    // xAxis.setAxisLineWidth(5f);//设置x轴线宽度

    // xAxis.setValueFormatter();//格式化x轴标签显示字符

    5.设置Y轴的显示效果 X轴与Y轴的常用属性都差不多 不详细举例了

    /**

    * Y轴默认显示左右两个轴线

    */

    //获取右边的轴线

    YAxis rightAxis=lineChart.getAxisRight();

    //设置图表右边的y轴禁用

    rightAxis.setEnabled(false);

    //获取左边的轴线

    YAxis leftAxis = lineChart.getAxisLeft();

    //设置网格线为虚线效果

    leftAxis.enableGridDashedLine(10f, 10f, 0f);

    //是否绘制0所在的网格线

    leftAxis.setDrawZeroLine(false);

    6.设置与图表交互

    lineChart.setTouchEnabled(true); // 设置是否可以触摸

    lineChart.setDragEnabled(true);// 是否可以拖拽

    lineChart.setScaleEnabled(false);// 是否可以缩放 x和y轴, 默认是true

    lineChart.setScaleXEnabled(true); //是否可以缩放 仅x轴

    lineChart.setScaleYEnabled(true); //是否可以缩放 仅y轴

    lineChart.setPinchZoom(true); //设置x轴和y轴能否同时缩放。默认是否

    lineChart.setDoubleTapToZoomEnabled(true);//设置是否可以通过双击屏幕放大图表。默认是true

    lineChart.setHighlightPerDragEnabled(true);//能否拖拽高亮线(数据点与坐标的提示线),默认是true

    lineChart.setDragDecelerationEnabled(true);//拖拽滚动时,手放开是否会持续滚动,默认是true(false是拖到哪是哪,true拖拽之后还会有缓冲)

    lineChart.setDragDecelerationFrictionCoef(0.99f);//与上面那个属性配合,持续滚动时的速度快慢,[0,1) 0代表立即停止。

    7.设置图例

    Legend l = lineChart.getLegend();//图例

    l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART_INSIDE);//设置图例的位置

    l.setTextSize(10f);//设置文字大小

    l.setForm(Legend.LegendForm.CIRCLE);//正方形,圆形或线

    l.setFormSize(10f); // 设置Form的大小

    l.setWordWrapEnabled(true);//是否支持自动换行 目前只支持BelowChartLeft, BelowChartRight, BelowChartCenter

    l.setFormLineWidth(10f);//设置Form的宽度

    8.设置MarkView提示 点击交点的小提示窗

    //自定义的MarkerView对象

    MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);

    mv.setChartView(lineChart);

    lineChart.setMarker(mv);

    /**

    *自定义MyMarkerView

    */

    public class MyMarkerView extends MarkerView {

    private TextView tvContent;

    public MyMarkerView(Context context, int layoutResource) {

    super(context, layoutResource);

    tvContent= (TextView) findViewById(R.id.tvContent);

    }

    @Override

    public void refreshContent(Entry e, Highlight highlight) {

    if (e instanceof CandleEntry) {

    CandleEntry ce = (CandleEntry) e;

    tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true));

    } else {

    tvContent.setText("" + Utils.formatNumber(e.getY(), 0, true));

    }

    super.refreshContent(e, highlight);

    }

    @Override

    public MPPointF getOffset() {

    return new MPPointF(-(getWidth() / 2), -getHeight());

    }

    }

    //布局文件

    android:layout_width="60dp"

    android:layout_height="40dp"

    android:background="@drawable/marker2"

    android:layout_marginBottom="5dp">

    android:id="@+id/tvContent"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerHorizontal="true"

    android:layout_marginTop="7dp"

    android:layout_marginLeft="5dp"

    android:layout_marginRight="5dp"

    android:text=""

    android:textSize="12dp"

    android:textColor="@android:color/white"

    android:ellipsize="end"

    android:singleLine="true"

    android:textAppearance="?android:attr/textAppearanceSmall" />

    9.设置动画

    // animateX(int durationMillis) : 水平轴动画 在指定时间内 从左到右

    // animateY(int durationMillis) : 垂直轴动画 从下到上

    // animateXY(int xDuration, int yDuration) : 两个轴动画,从左到右,从下到上

    lineChart.animateXY(1000,1000);

    在使用中遇到的问题

    1.x轴自定义标签的设置

    在2点几的版本中x轴的标签是直接可以通过LineData 的构造参数 传一个string数组设置进去的 LineData data = new LineData(xVals, dataSets); 而最新的3版本看源码似乎把这个重载去掉了 我自己想了想 通过XY轴都带有的格式化数据 判断value值来进行标签显示的控制 不知道到什么还有没有其他的方法

    setValueFormatter X轴,Y轴以及LineDataSet都带有此方法

    xAxis.setValueFormatter(new IAxisValueFormatter() {

    @Override

    public String getFormattedValue(float value, AxisBase axis) {

    return null;

    }

    });

    2.x轴默认的显示数字显示间隔

    我想让这里1,2,3,4,5,6,7这样的顺序显示 没有找到一个很好的办法 求指教

    3.x轴默认显示4个或是几个标签。。。。 xAxis.setLabelCount(10); 可以设置标签的显示数量

    参考链接

    展开全文
  • MpAndroidChart之lineChart的基本使用

    千次阅读 2021-01-19 23:50:46
    1、基本绘制 我们今天绘制目标是绘制中最简单的LineChart,虽然LineChart看起来比较简单,但是可以帮助我们理清楚MpandroidChart的基本使用方式,帮助我们快速了解一些基本的属性。 我在我们最上面的图上标注了5个...


    老规矩,现来一波效果图,后续咱们文章也是讲解如果实现效果图对应的效果。
    在这里插入图片描述
    效果看着还不错吧,这里是使用的一个很火的图表控件进行绘制的, MpandroidChart

    https://github.com/PhilJay/MPAndroidChart
    

    使用这个开源的图表控件,可以快速帮我们实现很多炫酷的效果,比如下面的
    在这里插入图片描述
    在这里插入图片描述
    在接下来的一小段时间,我将从基本的控件使用,逐步到源码分析和使用踩坑,整体过一波。

    1、基本绘制

    我们今天绘制目标是绘制中最简单的LineChart,虽然LineChart看起来比较简单,但是可以帮助我们理清楚MpandroidChart的基本使用方式,帮助我们快速了解一些基本的属性。

    在这里插入图片描述
    我在我们最上面的图上标注了5个点,先对着图表说明下,他对应的是mpandroidchart中的什么属性。

    • 1-标示的是y轴左边部分,对应的是axisLeft
    • 2-标示的是x轴,对应的是xAxis
    • 5-标示的是x轴的label,可以使用drawLabel进行绘制
    • 3-对应的是legend,标示图例
    • 4-这里是我们的主角了,想要绘制的线

    下面上实现代码,代码里面加了属性注释,方便对照属性

    <com.github.mikephil.charting.charts.LineChart
                android:id="@+id/lineChartView"
                android:layout_width="match_parent"
                android:layout_height="300dip" />
    
    lineChartView2.description.text = ""
            lineChartView2.description.textColor = Color.RED
            lineChartView2.description.textSize = 16F
            lineChartView2.setNoDataText("无可用数据")  //没数据的时候展示
            lineChartView2.setDrawBorders(false)// 是否绘制边框
            lineChartView2.animateX(500)  //x轴动画
            lineChartView2.setTouchEnabled(true)  //设置支持触摸
            lineChartView2.setScaleEnabled(true)  //是否支持缩放,默认true
            lineChartView2.isDragEnabled = true //是否支持拖拽
            lineChartView2.isScaleXEnabled = true //是否支持x轴缩放
            lineChartView2.isScaleYEnabled = true //是否支持y轴缩放
            lineChartView2.setPinchZoom(true)  //是否支持x、y轴同时缩放,默认为false
            lineChartView2.isDoubleTapToZoomEnabled = true //是否支持双击屏幕放大,默认true
            lineChartView2.isHighlightPerDragEnabled = true  //是否拖拽高亮线(数据点和坐标的提示线),默认true
            lineChartView2.isDragDecelerationEnabled = true //拖拽滚动时,手放开是否会持续滚动,默认true,false是拖动到那算那
            lineChartView2.dragDecelerationFrictionCoef = 0.99F //和上面的属性相配合,配置持续滚动的速度快慢,区间【0-1】0表示立即停止
    
            //绘制x轴
            val xAxis = lineChartView2.xAxis
            xAxis.position = XAxis.XAxisPosition.BOTTOM //设置x轴位置
            xAxis.axisMinimum = 0F //设置x轴最小值
            xAxis.textSize = 14F
            xAxis.textColor = Color.RED
            xAxis.isEnabled = true //是否显示x轴是否禁用
            xAxis.setDrawLabels(true) //设置x轴标签展示
            xAxis.setDrawGridLines(true) //设置设置x轴上每个对应的点的竖线
            xAxis.enableAxisLineDashedLine(2F, 2F, 2F) //竖线 -虚线样式
            xAxis.labelRotationAngle = 30F //设置x轴标签的旋转角度
    
            //绘制y轴
            val yAxisLeft = lineChartView2.axisLeft
            yAxisLeft.textSize = 14F
            yAxisLeft.axisMinimum = 0F
            val yAxisRight = lineChartView2.axisRight
            yAxisRight.isEnabled = false
    
            val lineDataEntities = ArrayList<Entry>()
            val random = Random(10)
            for (index in 1 until 20) {
                lineDataEntities.add(Entry(index.toFloat(), random.nextFloat()))
            }
    
            val lineDataSet = LineDataSet(lineDataEntities, "股票走势曲线")
            lineDataSet.highLightColor = Color.RED  //设置高亮线的颜色
            lineDataSet.color = Color.BLACK  //折线颜色
            lineDataSet.setCircleColor(Color.BLUE)  //设置交点的圆圈颜色
            lineDataSet.setDrawCircles(false)  //是否绘制交点
            lineDataSet.setDrawValues(false)  //是否显示交叉点的数值
            lineDataSet.valueTextColor = Color.CYAN  //设置交叉点上的值的颜色
            lineDataSet.valueTextSize = 14F //设置交叉点上值的字体大小
            lineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER //设置平滑曲线
            lineDataSet.fillColor = Color.parseColor("#F14400")
            lineDataSet.setDrawFilled(true)
    
            val lineData = LineData(lineDataSet)
            lineChartView2.data = lineData
            lineChartView2.invalidate()
    

    2、Marker使用

    在这里插入图片描述

    如果你突发奇想,想要可以长按的时候,展示当前按的位置的数据。不要担心,mpandroidchart作为一个强大的图表库,他是完全可以满足你的。

    那么,marker是时候登场了。

    使用 marker其实很简单。只需要3步。

    • 1、继承MarkView,在refreshContent(e: Entry?, highlight: Highlight?)中构造你要展示的数据内容。
    • 2、使用lineChartView.marker = 你的marker,将marker和图表绑定到一起。
    • 3、最关键的一步,运行代码,查看效果。
    class SimpleMarkerView(context: Context?) :
        MarkerView(context, R.layout.simple_marker_view) {
    
        override fun refreshContent(e: Entry?, highlight: Highlight?) {
            //这里的e值的是长按位置的数据,hignlight可以获取我们长按位置的x、y坐标
            if (e?.y == 0F || e?.x == 0F) {
                tv_off.text = "暂无数据"
            } else {
                tv_off.text = "第${e?.x}天支出${e?.y}元"
            }
            super.refreshContent(e, highlight)
        }
    
        //用来设置marker和长按的时候的指示hignlight的距离
        override fun getOffset(): MPPointF {
            return MPPointF((-width / 2).toFloat(), (-height).toFloat())
        }
    }
    
    lineChartView.marker = SimpleMarkerView(this)
    

    这里多说两句废话,或许是对你有用的,如果你想让长按的marker在手指离开后自动小时,可以自己通过手势实现。

    3、格式化x轴和y轴的数据展示

    如果你细心的画,肯定会发现,我们数据的x轴和y轴数据展示不一样,x轴是xx天的格式展示。这种是怎么实现的呢?

    这里就要用到坐标轴的格式化展示了。

    xAxis.valueFormatter = object : ValueFormatter() {
                override fun getFormattedValue(value: Float): String {
                    return "${lineEntities[value.toInt()].x}天"
                }
            }
    

    4、设置线条区域全填充、设置渐变

    要实现这两个功能,也很简答,首先是全填充。

    lineDataSet.setDrawFilled(true)
    

    可以直接使用LineDataSet的属性实现。同样,如果想要设置渐变的话,可以使用lineDataSet.fillDrawable设置一个drawable对象。

    展开全文
  • 发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法相关文章:Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)Android图表控件MPAndroidChart——曲线图LineChart的使用...

    发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法

    相关文章:

    Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)

    Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)

    Android图表控件MPAndroidChart——曲线图LineChart(多条曲线)动态添加数据

    Android图表控件MPAndroidChart——柱状图BarChart的使用(多条柱状图)

    Android图表控件MPAndroidChart——曲线图+柱状图 CombinedChart的使用

    Android图表控件MPAndroidChart——源码修改实现曲线图X轴直尺刻度样式

    本文相关代码

    MPAndroidChart在github地址:https://github.com/PhilJay/MPAndroidChart

    一.效果图

    一条曲线动态添加数据(X轴为当前时间)

    36896a2cfbbd86441a67bed09b99ef11.gif

    多条曲线线动态添加数据(X轴为当前时间)

    b9ab2f1767c6062fcfceb0f6f4fd241f.gif

    二.实现效果

    1.X轴为当前时间,只需要Y轴数据即可

    2.X轴的值为字符串,而Entry的构造方法参数全为float    public Entry(float x, float y)  所以需要另外定义X轴的值

    简要代码

    动态添加值Entry

    Entry entry = newEntry(lineDataSet.getEntryCount(),number);lineData.addEntry(entry,0);//通知数据已经改变lineData.notifyDataChanged();lineChart.notifyDataSetChanged();//设置在曲线图中显示的最大数量lineChart.setVisibleXRangeMaximum(10);//移到某个位置lineChart.moveViewToX(lineData.getEntryCount() - 5);

    X轴值的设定

    我并没有找到直接设置X轴为当前时间的方法,

    而是新建一个字符串集合,选择在每次添加Entry的时候将当前时间添加进集合,然后设置X轴的值

    privateSimpleDateFormat df= newSimpleDateFormat("HH:mm:ss");//设置日期格式privateList timeList= newArrayList<>();//存储x轴的时间

    xAxis.setValueFormatter(newIAxisValueFormatter() {

    @OverridepublicString getFormattedValue(floatvalue,AxisBase axis) {

    returntimeList.get((int) value % timeList.size());}

    });

    三.详细代码(一个管理类)

    public classDynamicLineChartManager {

    privateLineChart lineChart;privateYAxis leftAxis;privateYAxis rightAxis;privateXAxis xAxis;privateLineData lineData;privateLineDataSet lineDataSet;privateList lineDataSets= newArrayList<>();privateSimpleDateFormat df= newSimpleDateFormat("HH:mm:ss");//设置日期格式privateList timeList= newArrayList<>();//存储x轴的时间//一条曲线publicDynamicLineChartManager(LineChart mLineChart,String name, intcolor) {

    this.lineChart= mLineChart;leftAxis= lineChart.getAxisLeft();rightAxis= lineChart.getAxisRight();xAxis= lineChart.getXAxis();initLineChart();initLineDataSet(name,color);}

    //多条曲线publicDynamicLineChartManager(LineChart mLineChart,List names,List colors) {

    this.lineChart= mLineChart;leftAxis= lineChart.getAxisLeft();rightAxis= lineChart.getAxisRight();xAxis= lineChart.getXAxis();initLineChart();initLineDataSet(names,colors);}

    /***初始化LineChar*/private voidinitLineChart() {

    lineChart.setDrawGridBackground(false);//显示边界lineChart.setDrawBorders(true);//折线图例 标签 设置Legend legend = lineChart.getLegend();legend.setForm(Legend.LegendForm.LINE);legend.setTextSize(11f);//显示位置legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);legend.setDrawInside(false);//X轴设置显示位置在底部xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);xAxis.setGranularity(1f);xAxis.setLabelCount(10);xAxis.setValueFormatter(newIAxisValueFormatter() {

    @OverridepublicString getFormattedValue(floatvalue,AxisBase axis) {

    returntimeList.get((int) value % timeList.size());}

    });//保证Y轴从0开始,不然会上移一点leftAxis.setAxisMinimum(0f);rightAxis.setAxisMinimum(0f);}

    /***初始化折线(一条线)**@paramname*@paramcolor*/private voidinitLineDataSet(String name, intcolor) {

    lineDataSet= newLineDataSet(null,name);lineDataSet.setLineWidth(1.5f);lineDataSet.setCircleRadius(1.5f);lineDataSet.setColor(color);lineDataSet.setCircleColor(color);lineDataSet.setHighLightColor(color);//设置曲线填充lineDataSet.setDrawFilled(true);lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);lineDataSet.setValueTextSize(10f);lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);//添加一个空的LineDatalineData= newLineData();lineChart.setData(lineData);lineChart.invalidate();}

    /***初始化折线(多条线)**@paramnames*@paramcolors*/private voidinitLineDataSet(List names,List colors) {

    for(inti = 0;i < names.size();i++) {

    lineDataSet= newLineDataSet(null,names.get(i));lineDataSet.setColor(colors.get(i));lineDataSet.setLineWidth(1.5f);lineDataSet.setCircleRadius(1.5f);lineDataSet.setColor(colors.get(i));lineDataSet.setDrawFilled(true);lineDataSet.setCircleColor(colors.get(i));lineDataSet.setHighLightColor(colors.get(i));lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);lineDataSet.setValueTextSize(10f);lineDataSets.add(lineDataSet);}

    //添加一个空的LineDatalineData= newLineData();lineChart.setData(lineData);lineChart.invalidate();}

    /***动态添加数据(一条折线图)**@paramnumber*/public voidaddEntry(intnumber) {

    //最开始的时候才添加lineDataSet(一个lineDataSet代表一条线)if(lineDataSet.getEntryCount() == 0) {

    lineData.addDataSet(lineDataSet);}

    lineChart.setData(lineData);//避免集合数据过多,及时清空(做这样的处理,并不知道有没有用,但还是这样做了)if(timeList.size() > 11) {

    timeList.clear();}

    timeList.add(df.format(System.currentTimeMillis()));Entry entry = newEntry(lineDataSet.getEntryCount(),number);lineData.addEntry(entry,0);//通知数据已经改变lineData.notifyDataChanged();lineChart.notifyDataSetChanged();//设置在曲线图中显示的最大数量lineChart.setVisibleXRangeMaximum(10);//移到某个位置lineChart.moveViewToX(lineData.getEntryCount() - 5);}

    /***动态添加数据(多条折线图)**@paramnumbers*/public voidaddEntry(List numbers) {

    if(lineDataSets.get(0).getEntryCount() == 0) {

    lineData= newLineData(lineDataSets);lineChart.setData(lineData);}

    if(timeList.size() > 11) {

    timeList.clear();}

    timeList.add(df.format(System.currentTimeMillis()));for(inti = 0;i < numbers.size();i++) {

    Entry entry = newEntry(lineDataSet.getEntryCount(),numbers.get(i));lineData.addEntry(entry,i);lineData.notifyDataChanged();lineChart.notifyDataSetChanged();lineChart.setVisibleXRangeMaximum(6);lineChart.moveViewToX(lineData.getEntryCount() - 5);}

    }

    /***设置Y轴值**@parammax*@parammin*@paramlabelCount*/public voidsetYAxis(floatmax, floatmin, intlabelCount) {

    if(max < min) {

    return;}

    leftAxis.setAxisMaximum(max);leftAxis.setAxisMinimum(min);leftAxis.setLabelCount(labelCount, false);rightAxis.setAxisMaximum(max);rightAxis.setAxisMinimum(min);rightAxis.setLabelCount(labelCount, false);lineChart.invalidate();}

    /***设置高限制线**@paramhigh*@paramname*/public voidsetHightLimitLine(floathigh,String name, intcolor) {

    if(name == null) {

    name = "高限制线";}

    LimitLine hightLimit = newLimitLine(high,name);hightLimit.setLineWidth(4f);hightLimit.setTextSize(10f);hightLimit.setLineColor(color);hightLimit.setTextColor(color);leftAxis.addLimitLine(hightLimit);lineChart.invalidate();}

    /***设置低限制线**@paramlow*@paramname*/public voidsetLowLimitLine(intlow,String name) {

    if(name == null) {

    name = "低限制线";}

    LimitLine hightLimit = newLimitLine(low,name);hightLimit.setLineWidth(4f);hightLimit.setTextSize(10f);leftAxis.addLimitLine(hightLimit);lineChart.invalidate();}

    /***设置描述信息**@paramstr*/public voidsetDescription(String str) {

    Description description = newDescription();description.setText(str);lineChart.setDescription(description);lineChart.invalidate();}

    }

    XML布局

    Activity中的代码

    public classDynamicLineChartActivity extendsAppCompatActivity {

    privateDynamicLineChartManager dynamicLineChartManager1;privateDynamicLineChartManager dynamicLineChartManager2;privateList list= newArrayList<>();//数据集合privateList names= newArrayList<>();//折线名字集合privateList colour= newArrayList<>();//折线颜色集合@Overrideprotected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_dynamic_linechart);LineChart mChart1 = (LineChart) findViewById(R.id.dynamic_chart1);LineChart mChart2 = (LineChart) findViewById(R.id.dynamic_chart2);//折线名字names.add("温度");names.add("压强");names.add("其他");//折线颜色colour.add(Color.CYAN);colour.add(Color.GREEN);colour.add(Color.BLUE);dynamicLineChartManager1= newDynamicLineChartManager(mChart1,names.get(0),colour.get(0));dynamicLineChartManager2= newDynamicLineChartManager(mChart2,names,colour);dynamicLineChartManager1.setYAxis(100,0,10);dynamicLineChartManager2.setYAxis(100,0,10);//死循环添加数据newThread(newRunnable() {

    @Overridepublic voidrun() {

    while(true) {

    try{

    Thread.sleep(500);} catch(InterruptedException e) {

    e.printStackTrace();}

    runOnUiThread(newRunnable() {

    @Overridepublic voidrun() {

    list.add((int) (Math.random() * 50) + 10);list.add((int) (Math.random() * 80) + 10);list.add((int) (Math.random() * 100));dynamicLineChartManager2.addEntry(list);list.clear();}

    });}

    }

    }).start();}

    //按钮点击添加数据public voidaddEntry(View view) {

    dynamicLineChartManager1.addEntry((int) (Math.random() * 100));}

    }

    四.使用中遇到的一些问题

    1.X轴添加字符串,或者设置显示格式xAxis.setValueFormatter(newIAxisValueFormatter() {

    @OverridepublicString getFormattedValue(floatvalue,AxisBase axis) {

    returntimeList.get((int) value % timeList.size());}

    });

    2.动态添加数据数据时,曲线不自动往左边移动,而是挤在一堆

    //设置在曲线图中显示的最大数量lineChart.setVisibleXRangeMaximum(10);//移到某个位置lineChart.moveViewToX(lineData.getEntryCount() - 5);

    展开全文
  • MPAndroidChart——LineChart,配置 MarkerView。 想要运用好本篇博客,读者至少需要掌握 Android 开发有关 Activity 的部分,并且对 MPAndroidChart 有简单的了解。本文是傻瓜式教程,更多需求请查看官方文档。
  • flex LineChart

    2014-10-23 09:31:24
    以下是我最近做flex组件编程时的总结,是主要针对lineChart的用法,其中某些属性对同是有横纵坐标的columnChart、barChart等都有效,比如对背景的网格线、横纵坐标线条的粗细颜色和标签的设置都有效。
  • Android MPAndroidChart LineChart 首先添加依赖 在project下打开build.gradle,在allprojects写入 maven{ url ‘https://jitpack.io’} 在app下打开build.gradle,添加依赖 implementation ...
  • LineChart(折线图) 的简单使用

    万次阅读 2020-02-24 00:40:35
    LineChart 的简单使用LineChart依赖代码XMLJAVA代码效果图LineChart 的线的一些简单属性设置我们先来看一下效果图代码如下关于Mode的设置代码效果图 LineChart依赖 首先在app中的dependencies 中复制下面这行依赖 ...
  • o-linechart-card:已淘汰

    2021-05-01 12:09:53
    O-linechart卡 用 要使用,创建一个新的卡实例,以以下格式传入DOM目标和JSON配置有效负载: new lineChart([targetDomElement], [JsonPayload]); 其中targetDomElement是将在其中插入卡的DOM元素,而JsonPayload是...
  • fl_animated_linechart 一个动画的图表库,用于抖动。 支持日期时间轴多个y轴,支持不同的单位高光选择图表动画经过3000多分测试,仍然表现出色当前有两个不同的图表: 折线图面积图入门尝试示例项目或将其包含在您...
  • lineChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry entry, Highlight highlight) { Log.i("Show",entry.toString()); .
  • 发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法相关文章:Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)Android图表控件MPAndroidChart——曲线图LineChart的使用...
  • I'm using a line chart with JavaFX:LineChart lineChart = new LineChart<>(xAxis, yAxis);XYChart.Series series = new XYChart.Series();lineChart.getData().add(series);I want to add data to the seri...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,177
精华内容 19,270
关键字:

lineChart