achartengine_Android图表教程:AChartEngine

achartengine

在这篇文章中,我将描述如何使用AchartEngine 。 这是一个很棒的Android库,可帮助您创建图表。 它支持多种图表类型,仅举几例:

  • 折线图
  • 面积图
  • 条形图
  • 饼形图
  • 组合图

等等。


创建图表时,该库在各个方面都可以为您提供帮助,因此您无需其他任何东西即可创建有趣的图表。

入门

如果您使用Android Studio,则可以直接下载包含所有类的jar并将其添加到项目中。 下载完成后,应将库添加到libs文件夹下,以便我可以自动包含在您的项目中。 现在您可以使用lib了!

创建图表时,通常需要在图表中绘制一组数据,在这种情况下,要具有真实值并且不重新发明轮子,我们可以假设我们使用WeatherLib获得这些值,以便绘制图大气参数(例如温度和压力..)。

该库背后有一些基本概念,它们很重要,因此您可以使用它:

  • 数据集 (您必须在图表中绘制的数据
  • 视图 (或所需的图表类型)
  • 渲染器 (它控制视图的绘制方式,设置一些参数可以更改图表的显示方式。渲染器有两种类型:一种控制数据集的渲染,另一种控制主图表方面的外观(即轴,标签等)
  • 图表工厂 (将数据集和渲染器组合以创建图表。可以在“活动”内部创建图表,或者工厂可以返回“视图”。)

折线图

作为第一个示例,我们要创建一个折线图。 在此图表中,我们将绘制数据集温度。 考虑到折线图是XY图,我们首先创建保存数据的正确系列:

XYSeries series = new XYSeries("London Temperature hourly");

接下来,我们必须使用从WeatherLib(每小时天气预报)获取的数据来填充系列:

int hour = 0;
for (HourForecast hf : nextHourForecast) {
    series.add(hour++, hf.weather.temperature.getTemp());
}

几乎完成了,该系列包含数据。 如果仔细看,我们在X轴上表示小时,在Y轴上表示温度。

记住上述基本概念,我们必须创建一个系列渲染器:

// Now we create the renderer
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setLineWidth(2);
renderer.setColor(Color.RED);
// Include low and max value
renderer.setDisplayBoundingPoints(true);
// we add point markers
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setPointStrokeWidth(3);

在第3行,我们设置线宽。 使用achartengine时应考虑的一个方面是尺寸以像素表示,而不是以dp!表示。 在第4行,我们设置颜色,然后在第8行,我们设置点样式,这意味着我们的系列中包含的点。

最后一步是创建控制整个图表的渲染器,并为每个系列添加单个渲染器:

XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(renderer);

然后:

// We want to avoid black border
mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // transparent margins
// Disable Pan on two axis
mRenderer.setPanEnabled(false, false);
mRenderer.setYAxisMax(35);
mRenderer.setYAxisMin(0);
mRenderer.setShowGrid(true); // we show the grid

一个小提示:如果创建图表,您会注意到图表周围有黑色边框,如果要删除它们,则必须将此边距设置为透明(第2行)。 在第5,6行,我们设置Y值范围。

最后一步是创建视图:

GraphicalView chartView = ChartFactory.getLineChartView(getActivity(), dataset, mRenderer);

现在我们有了视图,最后一步是将其添加到布局中。 让我们假设我们有一个线性布局:

<LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/chart"
       android:orientation="vertical"/>

我们添加视图:

chartLyt.addView(chartView,0);

运行最后的示例:

android_temperature [4]

条形图

条形图是可以使用AchartEngine构建的另一种类型的图。 在这种情况下,我们可以假设要绘制从WeatherLib检索到的压力值。 和之前一样,我们必须创建一个数据系列:

for (HourForecast hf : nextHourForecast) {
    series.add(hour++, hf.weather.currentCondition.getPressure());

    if (hour > 24)
        break;
}

一些步骤与之前说明的非常相似,因此我们可以安全地跳过它们并创建图表:

GraphicalView chartView = ChartFactory.getBarChartView(getActivity(), dataset, mRenderer, BarChart.Type.DEFAULT);

结果我们得到:

android_pressure [4]

范围栏

范围条是条形图的一种特殊类型,它很有趣,因为它使用了另一种类型的数据系列。 范围条是具有下限和上限的条。 如果要绘制最高和最低温度,可以使用这种类型的图表。

RangeCategorySeries series = new RangeCategorySeries("London next days temperature");

现在我们添加值:

for (DayForecast df : dayForecast) {
    series.add(df.forecastTemp.min, df.forecastTemp.max);
    mRenderer.addXTextLabel(hour++, sdf.format(df.timestamp));
}

在第2行,我们设置最低和最高温度,将它们添加到数据序列中。 在第3行,我们在X轴值上添加标签。 在这种情况下,我们使用天数和月份:

SimpleDateFormat sdf = new SimpleDateFormat("dd,MMM");

现在我们添加系列:

XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series.toXYSeries());

并创建系列渲染器:

XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setDisplayChartValues(true);
mRenderer.addSeriesRenderer(renderer);
mRenderer.setYAxisMax(30.0);
mRenderer.setYAxisMin(0.0);
renderer.setChartValuesTextSize(12);
renderer.setChartValuesFormat(new DecimalFormat("#.##"));
renderer.setColor(Color.GREEN);

需要注意的一些方面:在第2行,告诉渲染器我们希望这些值出现在图表上,而在第6行,我们设置文本大小。 另一个重要方面:值格式:在第7行,我们指定要在小数点后两位。 最后,我们可以创建图:

GraphicalView chartView = ChartFactory.getRangeBarChartView(getActivity(), dataset, mRenderer, BarChart.Type.DEFAULT);

运行示例,我们有:

android_maxmin_temp [4]

  • 源代码即将发布。

翻译自: https://www.javacodegeeks.com/2014/06/android-chart-tutorial-achartengine.html

achartengine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值