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. win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)

    转自:http://blog.csdn.net/lhh31/article/details/51979293 1.软件版本 首先我先安装了 python 2.7 pip是  8.1.2 2.当我要安装 ...

  2. php7安装Memcached扩展

    要安装 memcached,需要先安装依赖库 libmemcached wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/lib ...

  3. 再也不学AJAX了!(三)跨域获取资源 ① - 同源策略

    我们之前提到过,AJAX技术使开发者能够专注于互联网中数据的传输,而不再拘泥于数据传输的载体.通过AJAX技术,我们获取数据的方式变得更加灵活,可控和优雅. 但是AJAX技术并不是一把万能钥匙,互联网 ...

  4. 解读:CombineFileInputFormat类

    MR-Job默认的输入格式FileInputFormat为每一个小文件生成一个切片.CombineFileInputFormat通过将多个“小文件”合并为一个"切片"(在形成切片的 ...

  5. [转载]Javassist 使用指南(二)

    ======================= 本文转载自简书,感谢原作者!. 原链接如下:https://www.jianshu.com/p/b9b3ff0e1bf8 =============== ...

  6. 谈一谈URL

    作者:ManfredHu 链接:http://www.manfredhu.com/2017/08/16/22-url/index.html 声明:版权所有,转载请保留本段信息,谢谢大家 URL URL ...

  7. php入门(一)

    一,在HTML中嵌入php代码 先看html的代码: <form action="processorder.php" method="post"> ...

  8. Partition List,拆分链表

    问题描述: Given a linked list and a value x, partition it such that all nodes less than x come before no ...

  9. 如何停止你的Streaming Application

    Spark 1.3及其前的版本 你的一个 spark streaming application 已经好好运行了一段时间了,这个时候你因为某种原因要停止它.你应该怎么做?直接暴力 kill 该 app ...

  10. 推荐给开发者的11个PHP框架(转)

    PHP框架对于Web开发者来说是非常有用的工具,它可以帮助使用者更快.更容易的完成项目.根据调查,PHP仍是Web开发中最受欢迎和最实用的平台之一.当谈及Web开发时,很多人依然会选择使用PHP框架, ...