AChartEngine中对比图

来源:互联网 发布:致远互联 京华网络 编辑:程序博客网 时间:2024/04/29 02:02
本文转载自:http://blog.csdn.net/itfootball/
package com.sprd.chartexample;import java.io.File;import java.io.FileOutputStream;import java.util.Random;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PointStyle;import org.achartengine.chartdemo.demo.chart.XYChartBuilder;import org.achartengine.model.SeriesSelection;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.model.XYSeries;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer.FillOutsideLine;import org.achartengine.tools.PanListener;import org.achartengine.tools.ZoomEvent;import org.achartengine.tools.ZoomListener;import android.os.Bundle;import android.os.Environment;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.Color;import android.graphics.Paint.Align;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class MainActivity extends Activity {public static final String TYPE = "type";private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 饼图// Intent pie = new APieChartExample().execute(this);// startActivity(pie);// 折线图// Intent line = new ALineChartExample().execute(this);// startActivity(line);// 柱状图// Intent bar = new ABarChartExample().execute(this);// startActivity(bar);// 构建数据// 设置图表显示的位置mRenderer.setMargins(new int[] { 30, 30, 30, 30 });// 设置图表的X轴处于水平方向还是垂直方向mRenderer.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);mRenderer.setXTitle("时间");// 设置为X轴的标题mRenderer.setYTitle("百分比");// 设置Y轴的标题mRenderer.setAxisTitleTextSize(20);// 设置轴标题文本大小mRenderer.setChartTitle("Cpu Load");// 设置图表标题mRenderer.setChartTitleTextSize(30);// 设置图表标题文字的大小mRenderer.setLabelsTextSize(22);// 设置标签的文字大小 ,刻度文本的大小// mRenderer.setLegendTextSize(20);//设置图例文本大小mRenderer.setYAxisMin(-10);// 设置y轴最小值是0mRenderer.setYAxisMax(50); // 设置Y轴最大值为50mRenderer.setYLabels(5);// 设置Y轴刻度个数(貌似不太准确)mRenderer.setYLabelsAlign(Align.RIGHT);// y轴字体对齐方式mRenderer.setYLabelsPadding(5);// y轴的间距mRenderer.setYLabelsVerticalPadding(-5); // y轴标签垂直间距mRenderer.setYLabelsAngle(-45);// 标签倾斜的角度mRenderer.setXLabelsPadding(5); // x轴标签间距mRenderer.setXAxisMax(10); // x轴最大值mRenderer.setXAxisMin(-1); // x轴最大值mRenderer.setXLabelsAngle(-45);// x标签倾斜的角度mRenderer.setXLabelsAlign(Align.CENTER);mRenderer.setShowGrid(true);// 显示网格mRenderer.setApplyBackgroundColor(true);// 允许设置背景颜色mRenderer.setBackgroundColor(Color.BLACK);// mRenderer.setXLabels(0);Random r = new Random();int[] colors = { Color.BLUE, Color.RED, Color.GREEN, Color.YELLOW,Color.LTGRAY };PointStyle[] styles = { PointStyle.SQUARE, PointStyle.CIRCLE,PointStyle.DIAMOND, PointStyle.DIAMOND, PointStyle.TRIANGLE };String[] titles = { "cpu0", "cpu1", "差值" };for (int i = 0; i < 3; i++) {// 线的条数,也就是对象的意思,显示在图表下,用于提示信息,比如Cpu有5个XYSeries series = new XYSeries(titles[i]);for (int k = 0; k < 10; k++) {if (i == 2) {series.add(k, mDataset.getSeriesAt(0).getY(k)- mDataset.getSeriesAt(1).getY(k));} else {series.add(k, 20 + r.nextInt(20));}}mDataset.addSeries(series);// 点的绘制进行设置XYSeriesRenderer xyRenderer = new XYSeriesRenderer();if (i == 2) {FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ALL);fill.setColor(Color.GREEN);xyRenderer.addFillOutsideLine(fill);}// 设置颜色xyRenderer.setColor(colors[i]);// 设置点的样式xyRenderer.setPointStyle(styles[i]);xyRenderer.setPointStrokeWidth(3f);// 线条宽度xyRenderer.setLineWidth(3);// 是否显示值xyRenderer.setDisplayChartValues(true);// 如果显示值,字体大小xyRenderer.setChartValuesTextSize(10);// 点的形状,是空心的还是实心的xyRenderer.setFillPoints(false);// 刻度之间的距离xyRenderer.setDisplayChartValuesDistance(0);// 点与数值的距离xyRenderer.setChartValuesSpacing(1);//xyRenderer.setDisplayBoundingPoints(false);// 点的面积xyRenderer.setPointStrokeWidth(1);// 是否显示图例xyRenderer.setShowLegendItem(true);mRenderer.addSeriesRenderer(xyRenderer);}Intent intent = ChartFactory.getCubicLineChartIntent(this, mDataset,mRenderer, 0.1f);startActivity(intent);}}



对比图,肯定原始数据有2条,然后自己计算第三条数据的值,最后给第三条数据的渲染器设置填充。


图:



0 0
原创粉丝点击