这两天自己琢磨AChartEngine绘制图表有关的内容,确实要比自己去画来得简单的多,性能也要好,而且自带的Demo里面各种图表的使用例子也很详细,要是单纯绘制简单的常用图表足够用了。不过我想要的是一种图表显示双Y轴,然后双柱对比形图和曲线走势图合在一起的效果,查过很多,没找到理想的效果,也尝试去看文档也没发现合适的办法,仅仅看到一个双Y轴单柱形-曲线的范例,也算比较符合,实在不满足就考虑将复杂图表分解开来了。下面分享的这个就是双Y轴单柱形--曲线的效果:
代码部分采用了给出的Demo的写法,定义一个 AbstractDemoChart抽象类,实现接口IDemoChart接口,这个类中封装了构建DataSet和renderer的方法,目的快速构建我们的dataset和renderer
package com.secom.energymanager.UI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart;
import org.achartengine.chart.CubicLineChart;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
public class ChartC extends AbstractDemoChart {
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getDesc() {
// TODO Auto-generated method stub
return null;
}
public Intent execute(Context context) {
// TODO Auto-generated method stub
String[] titles = new String[] { "今日累计用电" };
List<double[]> x = new ArrayList<double[]>();
for (int i = 0; i < titles.length; i++) {
x.add(new double[] { 1, 2, 3, 4 });
}
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 7771.54, 6232.36, 91.8, 429.89 });
// 取出集合中所有数据中最大值的方法,便于柱形图Y轴高度绘制
List<Double> getMax = new ArrayList<Double>();
for (int i = 0; i < values.size(); i++) {
for (double d : values.get(i)) {
getMax.add(d);
}
}
// 柱形图Y轴高度,在最大值基础上加2000,不会Y轴满屏
double ymaxValue = Collections.max(getMax) + 2000;
int[] colors = new int[] { Color.parseColor("#4386d8"),
Color.parseColor("#35e007") };
PointStyle[] styles = new PointStyle[] { PointStyle.POINT,
PointStyle.POINT };
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(2);
setRenderer(renderer, colors, styles);
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = (XYSeriesRenderer) renderer
.getSeriesRendererAt(i);
r.setLineWidth(2.5f);
}
setChartSettings(renderer, "分类分项柱状图", "用电项目", "能耗kWh", 0.3, 4.3, 0,
ymaxValue, Color.LTGRAY, Color.LTGRAY);
renderer.setXLabels(0);
renderer.setYLabels(12);
renderer.setZoomRate(1.05f);
renderer.setPanEnabled(true, false);// 不允许左右拖动,不允许上下拖动.
renderer.setBarSpacing(0.5f);// 柱子间宽度
renderer.addXTextLabel(1, "照明插座用电");
renderer.addXTextLabel(2, "空调用掉");
renderer.addXTextLabel(3, "动力用电");
renderer.addXTextLabel(4, "特殊用电");
renderer.setShowGrid(true);
renderer.setZoomButtonsVisible(true);
renderer.setYTitle("昨日单位面积能耗", 1);
renderer.setYLabelsPadding(-25);
renderer.setYAxisAlign(Align.RIGHT, 1);
renderer.setYLabelsAlign(Align.LEFT, 1);
XYMultipleSeriesDataset dataset = buildDataset(titles, x, values);
values.clear();
values.add(new double[] { 230.52, 157.43, 2.31, 11.31 });
addXYSeries(dataset, new String[] { " 昨日同期单位面积用电" }, x, values, 1);
String[] types = new String[] { BarChart.TYPE, CubicLineChart.TYPE };
Intent intent = ChartFactory.getCombinedXYChartIntent(context, dataset,
renderer, types, "单位耗能走势 ");
return intent;
}
}
比较郁闷的是,两种图形的X轴并不是十分匹配的,总是对不齐,效果差强人意,但是总体趋势可以看得出来,想进一步去绘制复杂的图表,看来还得多研究才行。
分享到:
相关推荐
基于achartengine双Y轴动态图表Android源码,画的是折线图随x轴移动并实时更新数据,当然也可以弄成别的图,长时间运行内存不会溢出,WHO用WHO开心
里面有曲线图 折线图 双曲线图 柱形图 饼图,在achartengine 的基础上 更改了一些颜色 .zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android高级应用源码-里面有曲线图 折线图 双曲线图 柱形图 饼图,在achartengine 的基础上 更改了一些颜色.zip
本实例是采用AChartEngine进行绘制折线图的一个例子,采用随机数作为采样点,同步参考博客http://blog.csdn.net/danming60520/article/details/14127639
android图表绘制工具,功能非常强大,几乎涵盖了所有的图表种类。 这是目前最新的版本:1.1.0 ...achartengine-1.1.0.jar, achartengine-1.1.0-demo-source.zip, achartengine-1.1.0-javadocs.zip 来自google code
aChartEngine制作双y轴(barChart+TimeChart)图表(x轴为日期/时间)-附件资源
针对安卓中的数据处理,进行简单的 数据显示,新手很好用的,后期可以做成比如测试软件,比如是屏幕帧数曲线图、cpu频率曲线图等等
此源码用于绘制双Y轴折线图,经过本人改编,是很好的绘图工具。
有曲线图 折线图 双曲线图 柱形图 饼图,在achartengine 的基础上 更改了一些颜色
源码参考,欢迎下载
achartengine绘制动态柱状图,详细注释,,,,,,,
官方的API并没有提供可以借鉴的动态更新饼图的方法,考虑到数据都是活动的,不可能总是用静态数据,所以我下面的demo就是模拟动态数据用饼图显示,但是肯定可以使用的,具体是通过定时器+Handler实现定时任务,通过...
主要是aChartEngine 图表中线性图表的time chart的使用,以时间为x轴单位,可以自由的设置单位为年 月 日 时 分 秒等,可以自由的设置间隔大小
AChartEngine最新jar包
AChartEngine的官方示例文档,曲线图,柱状图,饼图,区域图等等
使用 AChartEngine 实现 折线图的动态 绘图 自动滚动
android绘图 画饼状图 achartengine开源项目 文件包含achartengine-1.1.0.jar、achartengine-1.1.0-demo-source.zip、achartengine-1.1.0-javadocs.zip
可用于绘制多种图表,目前该绘图工具库的最新最新版本的是achartengine-1.1.0.jar。ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、气泡式图表、环形图、高低交替图等。 以上每种图表...
Achartengine 折线图 制图 achartengine 柱形图 曲线图 引擎 开源项目