13. 图例

默认情况下,所有的图表都支持图例并且会自动生成。给图表设置完数据之后,图例会被绘制出来。图例通常由多个条目组成,每个条目由标签形式/形状表示。

自动生成的图例包含的条目数取决于不同颜色的数量(跨所有DataSet对象)以及DataSet标签。图例的标签取决于为图表中使用的DataSet对象设置的标签。如果没有指定DataSet对象的标签,图表将自动生成。

为了自定义Legend,我们可以通过如下方式从图表中拿到Legend对象:

Legend legend = chart.getLegend();

13.1 控制Legend是否被绘制

方法 使用
setEnabled(boolean enabled) 设置图例禁用或者启用。如果设置为false,图例将不会被绘制出来

13.2 样式/修改图例

方法 使用
setTextColor(int color) 设置图例标签的文本颜色
setTextSize(float size) 设置图例标签的字体大小(dp)
setTypeface(Typeface tf) 设置图例标签的字体

13.3 换行/避免裁剪

方法 使用
setWordWrapEnabled(boolean enabled) 如果设置为true,如果图例标签过长,将会另起一行来展示超出图表范围的内容,而不是截断它。请注意,启动后会降低性能并且这个只对处理图表下的图例标签有效
setMaxSizePercent(float maxSize) 设置最大图例的百分比(相对整个图表大小)。默认为0.95f (95%)

13.4 自定义图例

方法 使用
setPosition(LegendPosition pos) 设置图例的显示位置。可选项:RIGHT_OF_CHART, RIGHT_OF_CHART_CENTER, RIGHT_OF_CHART_INSIDE, BELOW_CHART_LEFT, BELOW_CHART_RIGHT, BELOW_CHART_CENTER or PIECHART_CENTER (只有饼图使用这个)等等
setForm(LegendForm shape) 设置LegendForm。这是在带有图例条目表示的DataSet的颜色的图例标签旁边绘制的形状。可选项:SQUARE,CIRCLE、LINE。
setFormSize(float size) 设置legend-forms的大小(dp)
setXEntrySpace(float space) 设置横轴上的图例项之间的空间
setYEntrySpace(float space) 设置垂直轴上的图例条目之间的空间
setFormToTextSpace(float space) 设置图例标签和相应图例之间的空格
setWordWrapEnabled(boolean enabled) 设置 Legend 是否自动换行? 目前仅支持BelowChartLeft,BelowChartRight,BelowChartCenter.

13.5 设置自定义标签&颜色

方法 使用
setCustom(int[] colors, String[] labels) 设置自定义图例标签和颜色数组,颜色数量和标签数量相同且一一对应。这个方法将使默认的图例计算功能失效。调用resetCustom()来重新打开自动计算图例的功能(然后调用notifyDataSetChanged()来执行重新计算)
resetCustom() 调用这个方法之后自定义图例标签功能将会失效。标签将会被自动计算(调用notifyDataSetChanged()之后)
setExtra(int[] colors, String[] labels) 设置颜色数组和标签数据,颜色和标签一一对应,这些标签将会接在自动计算得到的标签之后(如果图例已经被计算出来, 我们需要调用notifyDataSetChanged()来让我们的修改生效)

13.6 示例

 Legend l = chart.getLegend();
    l.setFormSize(10f); // set the size of the legend forms/shapes
    l.setForm(LegendForm.CIRCLE); // set what type of form/shape should be used
    l.setPosition(LegendPosition.BELOW_CHART_LEFT);
    l.setTypeface(...);
    l.setTextSize(12f);
    l.setTextColor(Color.BLACK);
    l.setXEntrySpace(5f); // set the space between the legend entries on the x-axis
    l.setYEntrySpace(5f); // set the space between the legend entries on the y-axis

    // set custom labels and colors
    l.setCustom(ColorTemplate.VORDIPLOM_COLORS, new String[] { "Set1", "Set2", "Set3", "Set4", "Set5" });

    // and many more...

14. 动态 & 实时数据

从版本v1.6.3开始支持,持续改进中。

为了实现动态增删图表中的数据,开源库提供了大量的方法,方便我们实现图表中DataSet 数据条目的增加和删除。

14.1 动态添加/删除数据的可能性

DataSet类(和它的所有子类):

方法 使用
addEntry(Entry e) 把指定Entry添加到DataSet

ChartData类(和它的所有子类)

方法 使用
addEntry(Entry e, int dataSetIndex) 把指定Entry添加到DataSet的指定索引位置
addDataSet(DataSet d) 把指定DataSet添加到ChartData中

除此之外,还存在动态移除数据的方法,具体如下:

DateSet类(和它的所有子类)

方法 使用
public boolean removeFirst() 移除第一个Entry(索引为0)。成功返回true,失败返回false
public boolean removeLast() 移除最后一个Entry(索引为size-1)。成功返回true,失败返回false
public boolean removeEntry(Entry e) 移除指定Entry。成功返回true
public boolean removeEntry(int xIndex) 移除指定索引的Entry。成功返回true

ChartData类(和它的所有子类)

方法 使用
public boolean removeEntry(Entry e, int dataSetIndex) 移除指定索引位置DataSet中的给定Entry对象。成功则返回true
public boolean removeEntry(int xIndex, int dataSetIndex) 移除指定索引位置DataSet中的给定xIndex索引对应的Entry对象。成功则返回true
public boolean removeDataSet(DataSet d) 从ChartData中移除指定DataSet。成功则返回true
public boolean removeDataSet(int index) 从ChartData中移除指定索引位置对应的DataSet。成功则返回true

14.2 注意

在动态增加或者删除数据之后,记得调用notifyDataSetChanged() ,然后调用invalidate()来执行刷新操作。

 // EXAMPLE 1
 // add entries to the "data" object
 exampleData.addEntry(...);
 chart.notifyDataSetChanged(); // let the chart know it's data changed
 chart.invalidate(); // refresh

 // EXAMPLE 2
 // add entries to "dataSet" object
 dataSet.addEntry(...);
 exampleData.notifyDataChanged(); // let the data know a dataSet changed
 chart.notifyDataSetChanged(); // let the chart know it's data changed
 chart.invalidate(); // refresh

注意:像moveViewTo(…)这样的方法,将会自动调用invalidate()。


14.3 动态数据示例

有关如何实现动态数据添加/删除的示例,请参考示例应用程序和其中的如下Activity:


15. 修改视窗

本库提供了各种方法来修改视窗(图表的可见部分)。注意,这些修改视窗的方法仅适用于LineChart, BarChart, ScatterChart和CandleStickChart。

下面提到的方法都是Chart类提供的方法。修改视窗的另一种方法是通过ViewPortHandler直接访问它(没有图表提供的中间安全性)。这仅适用于熟悉API的高级用户。

请注意,只有在设置数据之后才能调用上面这些修改视窗的方法

15.1 限制可见范围

方法 使用
setVisibleXRangeMaximum(float maxXRange) 设置在X轴上一次性最大可见范围。如果这个值设置为10,则X轴取值超过10之外的图表在不滚动的情况是无法被看到的
setVisibleXRangeMinimum(float minXRange) 设置在X轴上一次性能看到的最小范围,如果这个值设置成10,则不管你怎么放大,X轴的取值范围都不会小于10
setVisibleYRangeMaximum(float maxYRange, AxisDependency axis) 设置Y轴上一次性最大可见范围。通过AxisDependency明确对应的Y轴
setViewPortOffsets(float left, float top, float right, float bottom) 设置当前视窗的自定义偏移量(实际图表窗口侧面的偏移量),设置这个值将阻止图表自动计算其偏移量。使用resetViewPortOffsets()方法来恢复自动计算偏移量的功能。注意,如果你不知道这个是干什么的,请先搞清楚再使用
resetViewPortOffsets() 重置所有setViewPortOffsets(…)设置的偏移量。允许图表自动计算所有偏移量
setExtraOffsets(float left, float top, float right, float bottom) 在自动计算的偏移量的基础上增加额外的偏移量。这个方法不会改变自动计算的偏移量结果,只是在其基础上追加

15.2 移动视图

方法 使用
fitScreen() 重设所有缩放和拖动,使图表完全适合它的边界(完全缩小)
moveViewToX(float xValue) 将当前视窗的左侧(边)到指定的 x 值
moveViewToY(float yValue, AxisDependency axis) 使得指定的y值显示在对应y轴( 左or右 )的中间
moveViewTo(float xValue, float yValue, AxisDependency axis) 将当前视窗的左侧移动到x轴上的指定x值,并将视窗居中到所提供的y轴上的指定y值,相当于setVisibleXRange(…) 和 setVisibleYRange(…) 组合使用
centerViewTo(float xValue, float yValue, AxisDependency axis) 将使当前视窗的中心移动到指定的x值和y值相当于 setVisibleXRange(…) 和 setVisibleYRange(…) 组合使用

15.3 移动视图动画

方法 使用
moveViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration) 和上面moveViewTo结果一样,只是这个过程有动画效果
centerViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration) 和上面centerViewTo结果一样,只是这个过程有动画效果

15.4 缩放

方法 使用
zoomIn() 以图表中心为中心点,1.4倍步幅放大
zoomOut() 以图表中心为中心点,0.7倍步幅缩小
zoom(float scaleX, float scaleY, float x, float y) 根据所给的参数进行放大或缩小。 参数 x 和 y 是变焦中心的坐标(单位:像素)。 记住,1f = 无放缩 。
zoomAndCenterAnimated(float scaleX, float scaleY, float xValue, float yValue, AxisDependency axis, long duration) 按照给定的缩放因子进行缩放,并将视图中心移动到指定位置(带动画)

15.5 完整示例

chart.setData(...); // first set data

// now modify viewport
chart.setVisibleXRangeMaximum(20); // allow 20 values to be displayed at once on the x-axis, not more
chart.moveViewToX(10); // set the left edge of the chart to x-index 10
// moveViewToX(...) also calls invalidate()

MPAndroidChart Wiki(译文)~Part 3的更多相关文章

  1. MPAndroidChart Wiki(译文)~Part 4

    16. 动画 注意:本章的动画效果只会在API 11(Android3.0.x)及以上的Android版本上生效 在低于上述的Android版本中,动画将不会被执行,并不会导致程序崩溃. 所有类型的图 ...

  2. MPAndroidChart Wiki(译文)~Part 1

    1. 基础入门 1.1 添加依赖 Gradle 工程添加依赖 (推荐使用) 项目级build.gradle中添加: allprojects { repositories { maven { url & ...

  3. MPAndroidChart Wiki(译文)~Part 6

    22. ViewPortHandler ViewPortHandler负责处理图表的视窗.也就是说它负责图表视图中的展示给用户的那部分内容.包括图表位移,缩放级别,图表大小和绘制区域以及当前偏移量.V ...

  4. MPAndroidChart Wiki(译文)~Part 5

    19. ChartData子类 这篇wiki主要关注ChartData子类的具体介绍.至于此部分没有提及到的ChartData的子类,代表他们没有特性功能需要介绍. BarData 方法 使用 set ...

  5. MPAndroidChart Wiki(译文)~Part 2

    7. 填充数据 这一章节将讲解给各式各样的图表设置数据的方法. 7.1 LineChart(线形图) 想给图表添加数据,使用如下方法: public void setData(ChartData da ...

  6. MPAndroidChart的具体属性方法

    android中常用的第三方图表MPAndroidChart的一些具体属性及方法说明 注意:在将折线图转为曲线图时,lineDataSet.setMode(LineDataSet.Mode.CUBIC ...

  7. <Android 应用 之路> MPAndroidChart~BubbleChart(气泡图) and RadarChart(雷达图)

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和iOS两种,这里我们暂时 ...

  8. <Android 应用 之路> MPAndroidChart~ScatterChart

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...

  9. <Android 应用 之路> MPAndroidChart~PieChart

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...

随机推荐

  1. 《Java 程序设计》团队博客第十一周(第一次)

    <Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...

  2. ubuntu下apt-get的配置文件是哪个

    答:在/etc/apt/apt.conf 这个配置文件里可以指定使用代理,如: Acquire::https::proxy "http://myproxy.com:8080/";

  3. 解决IE6已终止操作问题

    令人崩溃的IE6问题再次出现,打开某个页面时,弹出提示框“Internet Explorer无法打开Internet 站点...已终止操作”.    查了一下资料,感觉“因为js(一个比较复杂的js) ...

  4. [BZOJ3174]拯救小矮人

    Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...

  5. Chrome好用的插件:WhatRuns 查看网站使用的技术

    Chrome好用的插件:WhatRuns 查看网站使用的技术 这是一款免费的Chrome扩展程序,使用很简单. chrome安装这个插件之后,打开要检测的网站,然后点击WhatRuns 的图标,就开始 ...

  6. url拼接

    在做网页抓取的时候经常会遇到一个问题就是页面中的链接是相对链接,这个时候就需要对链接进行url拼接,才能得到绝对链接. url严格按照一定的格式构成,一般为如下5个字段: 详细可参考RFC:http: ...

  7. python 使用getopt 获取配置参数

    在工程中特别是稍微大一点的项目基本上都会用到配置,就会涉及到配置文件的读取,配置参数的读取. 常用的解析配置文件的是configParser,解析命令行参数的则为getopt. getopt的参数可以 ...

  8. Python基础笔记系列十三:socket网络编程

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!!使用python编写一个简易的服务端程序和客户端程序,启动服务端和客户端(监 ...

  9. 学习webpack3.x过程中遇到的问题:webpack-dev-server

    这篇博客主要记录的是本人在学习webpack3.x的过程中遇到的问题(虽然这几天4.0刚出来,但是我还是先学一下3.x吧) 1.配置文件可以用webpack启服务和热更新,步骤如下: ① 先下载:we ...

  10. JavaScript内存泄漏知多少?

    垃圾回收解放了我们,它让我们可将精力集中在应用程序逻辑(而不是内存管理)上.但是,垃圾收集并不神奇.了解它的工作原理,以及如何使它保留本应在很久以前释放的内存,就可以实现更快更可靠的应用程序.在本文中 ...