开源GraphView的使用--数据统计

最近做室内定位需要绘出加速度传感器输出的三个方向的加速度曲线,找到了开源https://github.com/jjoe64/GraphView-Demos,省去了要重新学MatLab *=*。

在http://www.android-graphview.org/download--getting-started.html下载.jar包。

1、GraphView的使用和普通View的使用相同。在Layout中:

   <com.jjoe64.graphview.GraphViewandroid:layout_width="match_parent"android:layout_height="200dip"android:id="@+id/graph" />
2、支持三种图表:Line和Bar、Point。

<span style="white-space:pre">		</span>GraphView graph = (GraphView) findViewById(R.id.graph);LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[] {new DataPoint(0, 1),new DataPoint(1, 5),new DataPoint(2, 3),new DataPoint(3, 2),new DataPoint(4, 6)});
<span style="white-space:pre">		</span>graph.addSeries(series);

 GraphView graph = (GraphView) rootView.findViewById(R.id.graph);BarGraphSeries<DataPoint> series = new BarGraphSeries<DataPoint>(new DataPoint[] {new DataPoint(0, -2),new DataPoint(1, 5),new DataPoint(2, 3),new DataPoint(3, 2),new DataPoint(4, 6)});series.setSpacing(30);graph.addSeries(series);

<span style="white-space:pre">	</span>PointsGraphSeries<DataPoint> series3 = new PointsGraphSeries<DataPoint>(new DataPoint[] {new DataPoint(0, 0),new DataPoint(1, 3),new DataPoint(2, 1),new DataPoint(3, 0),new DataPoint(4, 4)});graph.addSeries(series3);series3.setShape(PointsGraphSeries.Shape.TRIANGLE);//设置点的形状series3.setColor(Color.YELLOW);

也可以在XML中使用,但通过.jar包的不支持此功能。

 <com.jjoe64.graphview.helper.GraphViewXMLandroid:layout_width="match_parent"android:layout_height="100dip"app:seriesData="0=5;2=5;3=0;4=2"app:seriesType="line"app:seriesColor="#ee0000" />

3、设置各种属性

设置每条曲线的标注:

<span style="white-space:pre">		</span>graph.getLegendRenderer().setVisible(true);graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP);//右上角对每条线注释graph.getLegendRenderer().setTextColor(Color.WHITE);//标注字的颜色series.setTitle("foo");series1.setTitle("bar");

设置轴的数据显示格式:

<span style="white-space:pre">	</span>//设置轴分割数字格式NumberFormat nf = NumberFormat.getInstance();nf.setMinimumFractionDigits(1);//小数位数nf.setMinimumIntegerDigits(2);//整数部分位数graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter(nf, nf));

自定义画笔:

<span style="white-space:pre">	</span>//自定义画笔Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(10);paint.setPathEffect(new DashPathEffect(new float[]{8, 5}, 0));series1.setCustomPaint(paint);

点击事件:

<span style="white-space:pre">	</span>//线条点击事件series.setOnDataPointTapListener(new OnDataPointTapListener() {@Overridepublic void onTap(Series series, DataPointInterface dataPoint) {Toast.makeText(MainActivity.this, "Series1: On Data Point clicked: "+dataPoint, Toast.LENGTH_SHORT).show();}});

设置表格(分割线)颜色:

graph.getGridLabelRenderer().setGridColor(Color.WHITE);//表格颜色

实例展示:

自定义轴标签:

graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() {@Overridepublic String formatLabel(double value, boolean isValueX) {if (isValueX) {// show normal x valuesreturn super.formatLabel(value, isValueX);} else {// show currency for y valuesreturn super.formatLabel(value, isValueX) + "*";}}});



X轴设置为时间:

        // generate DatesCalendar calendar = Calendar.getInstance();Date d1 = calendar.getTime();calendar.add(Calendar.DATE, 1);Date d2 = calendar.getTime();calendar.add(Calendar.DATE, 1);Date d3 = calendar.getTime();GraphView graph = (GraphView) rootView.findViewById(R.id.graph);// you can directly pass Date objects to DataPoint-Constructor// this will convert the Date to double via Date#getTime()LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[] {new DataPoint(d1, 1),new DataPoint(d2, 5),new DataPoint(d3, 3)});graph.addSeries(series);// set date label formattergraph.getGridLabelRenderer().setLabelFormatter(new DateAsXAxisLabelFormatter(getActivity()));graph.getGridLabelRenderer().setNumHorizontalLabels(3); // only 4 because of the space// set manual x bounds to have nice stepsgraph.getViewport().setMinX(d1.getTime());graph.getViewport().setMaxX(d3.getTime());graph.getViewport().setXAxisBoundsManual(true);// as we use dates as labels, the human rounding to nice readable numbers// is not nessecarygraph.getGridLabelRenderer().setHumanRounding(false);


设置X、Y轴 Bounds:

 // set manual X boundsgraph.getViewport().setXAxisBoundsManual(true);graph.getViewport().setMinX(0.5);graph.getViewport().setMaxX(3.5);// set manual Y boundsgraph.getViewport().setYAxisBoundsManual(true);graph.getViewport().setMinY(3.5);graph.getViewport().setMaxY(8);


设置图表可以缩放:

// enable scalinggraph.getViewport().setScalable(true);

设置Y轴可以Auto,图表可以横向滑动:

// enable scrollinggraph.getViewport().setScrollable(true);
这只左右两个Y轴:

// set second scalegraph.getSecondScale().addSeries(series2);// the y bounds are always manual for second scalegraph.getSecondScale().setMinY(0);graph.getSecondScale().setMaxY(100);series2.setColor(Color.RED);graph.getGridLabelRenderer().setVerticalLabelsSecondScaleColor(Color.RED);// legendseries.setTitle("foo");series2.setTitle("bar");graph.getLegendRenderer().setVisible(true);graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP);graph.getViewport().setBackgroundColor(Color.GRAY);



使用 staticLables:

 // use static labels for horizontal and vertical labelsStaticLabelsFormatter staticLabelsFormatter = new StaticLabelsFormatter(graph);staticLabelsFormatter.setHorizontalLabels(new String[] {"old", "middle", "new"});staticLabelsFormatter.setVerticalLabels(new String[] {"low", "middle", "high"});graph.getGridLabelRenderer().setLabelFormatter(staticLabelsFormatter);


设置轴Lables:

 // titlesgraph.setTitle("Chart Title");graph.getGridLabelRenderer().setVerticalAxisTitle("Vertical Axis");graph.getGridLabelRenderer().setHorizontalAxisTitle("Horizontal Axis");

标签、背景色、字体、字大小、颜色....Styling:

 // styling grid/labelsgraph.getGridLabelRenderer().setGridColor(Color.RED);graph.getGridLabelRenderer().setHighlightZeroLines(false);graph.getGridLabelRenderer().setHorizontalLabelsColor(Color.GREEN);//水平轴字体颜色graph.getGridLabelRenderer().setVerticalLabelsColor(Color.RED);//垂直轴字颜色graph.getGridLabelRenderer().setVerticalLabelsAlign(Paint.Align.LEFT);graph.getGridLabelRenderer().setLabelVerticalWidth(150);graph.getGridLabelRenderer().setTextSize(40);//字大小graph.getGridLabelRenderer().setGridStyle(GridLabelRenderer.GridStyle.HORIZONTAL);//表格样式,水平线graph.getGridLabelRenderer().reloadStyles();graph.getGridLabelRenderer().setHorizontalLabelsAngle(120);//水平轴标签倾斜角// styling viewportgraph.getViewport().setBackgroundColor(Color.argb(255, 222, 222, 222));//图表背景色graph.getViewport().setDrawBorder(true);graph.getViewport().setBorderColor(Color.BLUE);// styling seriesseries.setTitle("Random Curve 1");series.setColor(Color.GREEN);series.setDrawDataPoints(true);series.setDataPointsRadius(10);series.setThickness(8);series2.setTitle("Random Curve 2");series2.setDrawBackground(true);series2.setBackgroundColor(Color.argb(100, 255, 255, 0));Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(10);paint.setPathEffect(new DashPathEffect(new float[]{8, 5}, 0));series2.setCustomPaint(paint);// styling legend 注释每条线代表什么graph.getLegendRenderer().setVisible(true);graph.getLegendRenderer().setTextSize(25);graph.getLegendRenderer().setBackgroundColor(Color.argb(150, 50, 0, 0));graph.getLegendRenderer().setTextColor(Color.WHITE);//graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP);//graph.getLegendRenderer().setMargin(30);graph.getLegendRenderer().setFixedPosition(150, 0);

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

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

相关文章

我的对象命名

这是最常见的辩论之一。 大多数人对此主题有自己的见解&#xff0c;却没人能真正说出哪个是正确的。 我当然不能&#xff0c;但是尽管如此&#xff0c;我还是决定与大家分享我的想法&#xff0c;投入两美分&#xff0c;也许对某人会有帮助。 当我创建一个新类时&#xff0c;我…

netbeans 定制代码_将NetBeans代码模板弯曲到我的意愿

netbeans 定制代码任何阅读过我关于NetBeans的文章的人都知道&#xff0c;我真的很喜欢NetBeans的许多功能。 但是&#xff0c;最近&#xff0c;我发现自己对NetBeans特定功能的特定问题越来越恼火。 最终&#xff0c;它使我烦恼不已&#xff0c;促使我开始研究如何根据自己的喜…

Java 9概览

对于许多Java 9来说&#xff0c;它似乎是一个维护版本&#xff0c;它推动了不能在Java 8中实现的项目Jigsaw。但是&#xff0c;随着JDK中的新模块系统以及与之相关的许多内部更改&#xff0c;Java 9也带来了开发人员工具箱中一些很棒的新内容。 以下是重点内容&#xff1a; JS…

adf开发_了解ADF Faces clientComponent属性

adf开发我相信大多数ADF开发人员都知道ADF Faces属性clientComponent 。 在本文中&#xff0c;我将展示该属性实际上如何影响组件渲染以及它如何改变其行为。 让我们开始考虑一个非常简单的示例&#xff1a; <af:inputText label"Label 1" id"it1" /&g…

Picocli 2.0:事半功倍

介绍 Picocli是一个单文件命令行解析框架&#xff0c;它使您几乎不需要任何代码即可创建命令行应用程序。 使用Option或Parameters注释应用程序中的字段&#xff0c;picocli将分别使用命令行选项和位置参数填充这些字段。 例如&#xff1a; Command(name "Greet", …

移动通信—无线波传播

无线波传播 发射天线或自然辐射源所辐射的无线电波,通过自然条件下的媒质到达接受天线的过程称为无线电波传播。无线电波与可见光、X射线与γ射线-.样同属于电磁波,它们都是以电场和磁场为其特征的- -种电场震动。电磁波的频谱范围很宽,从几赫到3X 1023Hz(波长从几十兆米到10-9…

使用Dropwizard度量标准监视和测量无功应用

在上一篇文章中&#xff0c;我们创建了一个简单的索引代码&#xff0c;该代码可以对ElasticSearch进行数千个并发请求。 监视系统性能的唯一方法是老式的日志记录语句&#xff1a; .window(Duration.ofSeconds(1)) .flatMap(Flux::count) .subscribe(winSize -> log.debug(…

移动通信-多径效应,多普勒效应,菲涅尔区,阴影效应,快衰落,慢衰落

多径效应 信号从发射端到接收端常有许多时延不同、损耗各异的传输路径&#xff0c;可以是直射、反射或是绕射。无线电波的多径效应是指不同路径的相同信号在按收端叠加会增大或减小接收信号能量的现象。 时间色散 在无线通信中&#xff0c;无线电波从发射端到接收端会经过直射、…

四旋翼

更新2018/11 1系统设计 硬件总体框架&#xff08;认识四旋翼的基本组成&#xff09; 机架主要的两种&#xff08;x型控制更难&#xff0c;动作灵活&#xff09; 十字型,X字型 桨 7040,8045&#xff08;常用&#xff09;&#xff0c;前四位直径&#xff0c;后四位角度 正反螺旋…

hotspot线程模型_Linux上的HotSpot GC线程CPU占用空间

hotspot线程模型以下问题将测试您对Linux操作系统上运行的Java应用程序的垃圾收集和高CPU故障排除的知识。 当调查过多的GC和/或CPU利用率时&#xff0c;此故障排除技术尤其重要。 它将假定您无权使用高级监控工具&#xff0c;例如Compuware dynaTrace甚至JVisualVM。 将来将介…

数字信号处理实验一

补充2019/10/26 (1)序列的加、减、乘、除和乘方运算。输入A[1 2 3 4]&#xff0c;B[3 4 5 6]&#xff0c;起点n0&#xff0c;求CAB&#xff0c;DA-B&#xff0c;EA.*B&#xff0c;FA./B&#xff0c;GA.^B&#xff0c;并用stem语句画出A&#xff0c;B&#xff0c;C&#xff0c;D…

SRP是骗局

根据罗伯特马丁 &#xff08; Robert Martin&#xff09;的 《 清洁法 》&#xff08; Clean Code&#xff09; &#xff0c;“ 单一责任原则 ”意味着“一个阶级应该只有一个改变的理由”。 让我们尝试解密这个模糊的语句&#xff0c;看看它如何帮助我们设计更好的面向对象软件…

数字信号处理实验二

补2019/11/2 &#xff08;1&#xff09;编写函数如xsiAdd(x1,n1,x2,n2),实现两个序列x1和x2的相加&#xff0c;其中x1的下标为n1n1s:nlf&#xff0c;x2的下标为n2n2s:n2f。绘制出该函数的图形。设x1&#xff08;n&#xff09;n,0≦n1≦9,x2(n)n,4≦n2≦15。 &#xff08;2&…

apache camel_使用Apache Camel发布/订阅模式

apache camel发布/订阅是一种简单的消息传递模式&#xff0c;其中&#xff0c;发布者将消息发送到某个频道&#xff0c;而无需知道谁将接收消息。 然后&#xff0c;通道负责将消息的副本传递给每个订户。 此消息传递模型可以创建松耦合和可伸缩的系统。 这是一种非常常见的消息…

Java 9:JShell

JShell是Java 9中引入的新工具&#xff0c;用于评估在命令行上输入的Java语句。 它是Java平台上第一个正式的REPL&#xff08;读取-评估-打印循环&#xff09;实现&#xff0c;非常适合尝试Java代码而无需启动IDE或编写完整的程序&#xff01; 要运行JShell&#xff0c;只需在…

三句话介绍清楚滑动窗口协议/GBN/SR

滑动窗口协议、GBN、SR之间不得不说的故事 首先我们来介绍什么是滑动窗口协议 滑动窗口协议&#xff08;Sliding Window Protocol&#xff09;&#xff0c;属于TCP协议的一种应用&#xff0c;用于网络数据传输时的流量控制&#xff0c;以避免拥塞的发生。该协议允许发送方在停…

《计算机网络自顶向下》之重头戏迪杰斯特拉算法

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xff0c;采用贪心算法的策略&…

新闻发布系统java ee_Java EE 7发布–反馈和新闻报道

新闻发布系统java eeJava EE 7已经存在了几天。 我们所有人都有机会观看直播活动或可用的重播 。 最后的MR版本完成了将其工作推向JCP的工作&#xff0c;基本上是一个总结。 是时候反思发生的事情和我对此的想法了。 启动活动中的社区参与 它不是一个大秘密。 即使Oracle的Jav…

在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

从历史上看&#xff0c; Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的&#xff0c;就像您今天所做的那样。 下一代代理Apache ActiveMQ Artemis&#xff08;或仅是Artemis&#xff09;则不是这种情况&#xff0c;后者对大消息有更好的支持。 因…

深入浅出组合逻辑电路(1)

定义&#xff1a;电路在任意时刻的输出仅由该时刻的输入信号决定&#xff0c;与之前的输入信号无关。 组合电路通常有一些逻辑门构成&#xff0c;许多具有典型功能的组合电路已经集成为商品电路。&#xff08;加法器&#xff0c;译码器等&#xff09; 分析步骤&#xff1a; …