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. 比较字符串CompareTo的用法及注意

    CompareTo用法 static void Main(string[] args)         {             string str = "1";        ...

  2. MR案例:多文件输出MultipleOutputs

    问题描述:现有 ip-to-hosts.txt 数据文件,文件中每行数据有两个字段:分别是ip地址和该ip地址对应的国家,以'\t'分隔.要求汇总不同国家的IP数,并以国家名为文件名将其输出.解读:M ...

  3. Centos7 Python3.x源码安装

    第一步,安装开发工具集 yum -y groupinstall "Development tools" 第二步,安装相关依赖包: yum -y install zlib-devel ...

  4. JAVA小工具打包

    D: cd D:\xxx\IPOSpider javac -d bin/ src/com/xxx/IPOSpider.java src/com/xxx/ConfigProperties.java -c ...

  5. 解题报告:hdu1284 钱币兑换问题

    2017-09-03 19:03:06 writer:pprp 状态定义: dp[i][j] = x 代表的是 用前i 中硬币构造 j 美分的方法数目: 初始化: dp[0][0] = 1 状态转移: ...

  6. linux环境变量 export命令详解

    由host $ export DVSDK="${HOME}/ti-dvsdk_dm368-evm_xx_xx_xx_xx"引发的问题 1.${HOME}:首先, HOME 是个变量 ...

  7. git tags 管理

    新建标签: git tag -a V1.1 -m "some thing" (新建标签前请先commit代码) 推送标签: git push --tags (推送标签前请先推送代码 ...

  8. PHP 数组遍历 foreach 语法结构

    foreach 语法结构用于遍历数组. foreach() PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未 ...

  9. 我的Android学习路线(二)

    这两天的主要工作: 优化了一下布局界面,原本使用的是相对布局,直观省力,但是考虑了一下还是使用更加主流的线性布局. 完善了一下计算器的功能,比如加入小数运算. 使用线性布局的思路可以用下面的伪代码表示 ...

  10. java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)

    代码部分: public static void main(String[] args) { testInt(); testString(); testArray(); testX(); } publ ...