使用AChartEngine绘制双Y轴的柱形--曲线图
2013-06-08 10:22
399 查看
这两天自己琢磨AChartEngine绘制图表有关的内容,确实要比自己去画来得简单的多,性能也要好,而且自带的Demo里面各种图表的使用例子也很详细,要是单纯绘制简单的常用图表足够用了。不过我想要的是一种图表显示双Y轴,然后双柱对比形图和曲线走势图合在一起的效果,查过很多,没找到理想的效果,也尝试去看文档也没发现合适的办法,仅仅看到一个双Y轴单柱形-曲线的范例,也算比较符合,实在不满足就考虑将复杂图表分解开来了。下面分享的这个就是双Y轴单柱形--曲线的效果:
![](http://img.blog.csdn.net/20130608101701031)
代码部分采用了给出的Demo的写法,定义一个 AbstractDemoChart抽象类,实现接口IDemoChart接口,这个类中封装了构建DataSet和renderer的方法,目的快速构建我们的dataset和renderer
比较郁闷的是,两种图形的X轴并不是十分匹配的,总是对不齐,效果差强人意,但是总体趋势可以看得出来,想进一步去绘制复杂的图表,看来还得多研究才行。
代码部分采用了给出的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轴的柱形--曲线图
- 使用achartengine绘制曲线图
- Android使用AchartEngine绘制曲线图
- Android使用AchartEngine绘制曲线图
- 使用Path绘制图形,和绘制一条动画曲线(跟踪动画)
- 监控Linux系统的内存和CPU,并使用excel表格绘制曲线
- 使用caffe自带的工具绘制loss函数曲线
- JavaScript- 使用 atan2 来绘制 箭头 和 曲线
- Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
- php使用Jpgraph绘制柱形图的方法
- C# WinForm开发系列之c# 通过.net自带的chart控件绘制饼图,柱形图和折线图的基础使用和扩展
- Android 开发 使用achartengine-0.7.0.jar 绘制柱状图
- Android制作曲线、柱状图、饼形等图表——使用AChartEngine
- C# WinForm开发系列之c# 通过.net自带的chart控件绘制饼图,柱形图和折线图的基础使用和扩展
- Python:如何使用jupyter绘制caffe训练过程中的loss和accuracy曲线?n
- pyqt中使用matplotlib绘制动态曲线
- HTML5开发实例-使用canvas绘制曲线
- Python使用matplotlib绘制三维曲线
- 使用plot绘制正弦与与余弦函数曲线图实例代码
- 数值分析基础工具使用Matlab绘制双曲线