Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用AChartEngine库的条形图_Android_Graph_Bar Chart_Achartengine_Unix Timestamp - Fatal编程技术网

Android 使用AChartEngine库的条形图

Android 使用AChartEngine库的条形图,android,graph,bar-chart,achartengine,unix-timestamp,Android,Graph,Bar Chart,Achartengine,Unix Timestamp,我有一个使用AChartEngine库的条形图,如下所示: public class MainActivity extends Activity { private String[] mMonth = new String[] { "Jan", "Feb" , "Mar", "Apr", "May", "Jun", "Jul", "Aug" , "Sep", "Oct", "Nov", "Dec" }; @Overrid

我有一个使用
AChartEngine
库的条形图,如下所示:

public class MainActivity extends Activity {

  private String[] mMonth = new String[] {
            "Jan", "Feb" , "Mar", "Apr", "May", "Jun",
            "Jul", "Aug" , "Sep", "Oct", "Nov", "Dec"
        };

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Getting reference to the button btn_chart
    Button btnChart = (Button) findViewById(R.id.btn_chart);

    // Defining click event listener for the button btn_chart
    OnClickListener clickListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Draw the Income vs Expense Chart
            openChart();                
        }
    };

    // Setting event click listener for the button btn_chart of the MainActivity layout
    btnChart.setOnClickListener(clickListener);

}

private void openChart(){
    int[] x = { 0,1,2,3,4,5,6,7 };
    int[] income = { 2000,2500,2700,3000,2800,3500,3700,3800};
    int[] expense = {2200, 2700, 2900, 2800, 2600, 3000, 3300, 3400 };

    // Creating an  XYSeries for Income
    //CategorySeries incomeSeries = new CategorySeries("Income");
    XYSeries incomeSeries = new XYSeries("Income");
    // Creating an  XYSeries for Income
    XYSeries expenseSeries = new XYSeries("Expense");
    // Adding data to Income and Expense Series
    for(int i=0;i<x.length;i++){            
        incomeSeries.add(i,income[i]);
        expenseSeries.add(i,expense[i]);
    }


    // Creating a dataset to hold each series
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
    // Adding Income Series to the dataset
    dataset.addSeries(incomeSeries);
    // Adding Expense Series to dataset
    dataset.addSeries(expenseSeries);       

    // Creating XYSeriesRenderer to customize incomeSeries
    XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
    incomeRenderer.setColor(Color.rgb(130, 130, 230));
    incomeRenderer.setFillPoints(true);
    incomeRenderer.setLineWidth(2);
    incomeRenderer.setDisplayChartValues(true);

    // Creating XYSeriesRenderer to customize expenseSeries
    XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
    expenseRenderer.setColor(Color.rgb(220, 80, 80));
    expenseRenderer.setFillPoints(true);
    expenseRenderer.setLineWidth(2);
    expenseRenderer.setDisplayChartValues(true);        
    Calendar cal = Calendar.getInstance();
    cal.clear(Calendar.HOUR);
    // Creating a XYMultipleSeriesRenderer to customize the whole chart
    XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
    multiRenderer.setXLabels(0);
    multiRenderer.setChartTitle("Income vs Expense Chart");
    multiRenderer.setXTitle("Year 2012");
    multiRenderer.setYTitle("Amount in Dollars");
    multiRenderer.setZoomButtonsVisible(true);              
    for(int i=0; i< x.length;i++){
        multiRenderer.addXTextLabel(i, mMonth[i]);          
    }       

    // Adding incomeRenderer and expenseRenderer to multipleRenderer
    // Note: The order of adding dataseries to dataset and renderers to multipleRenderer
    // should be same
    multiRenderer.addSeriesRenderer(incomeRenderer);
    multiRenderer.addSeriesRenderer(expenseRenderer);

    // Creating an intent to plot bar chart using dataset and multipleRenderer      
    Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer, Type.DEFAULT);

    // Start Activity
    startActivity(intent);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
 }
}
公共类MainActivity扩展活动{
私有字符串[]mMonth=新字符串[]{
“一月”、“二月”、“三月”、“四月”、“五月”、“六月”,
“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”
};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取对按钮btn\U图表的引用
按钮btnChart=(按钮)findViewById(R.id.btn\U图表);
//为按钮btn\U图表定义单击事件侦听器
OnClickListener clickListener=新建OnClickListener(){
@凌驾
公共void onClick(视图v){
//绘制收入与支出的图表
openChart();
}
};
//设置MainActivity布局的按钮btn_图表的事件单击侦听器
btnChart.setOnClickListener(单击Listener);
}
私有void openChart(){
int[]x={0,1,2,3,4,5,6,7};
int[]收入={20002500270030002800350037003800};
int[]费用={220027002902800260030033003400};
//创建收入系列
//分类系列收入=新分类系列(“收入”);
XYSeries incomeSeries=新XYSeries(“收入”);
//创建收入系列
XYSeries expenseSeries=新的XYSeries(“费用”);
//向收入和支出系列添加数据
对于(int i=0;i2am
  • X轴上的每个条形图为5分钟条形图
  • 每5分钟我发送一个数据,它应该根据 价值观
  • 现在忽略Y轴参数只需要如何绘制所需 X-aixs
  • 下图显示了一些类似于以下内容的内容:


    您可以在X轴上保留Unix时间戳并自己控制标签。您可以使用以下方法添加自定义X轴标签:

    renderer.addXTextLabel(x, "label");
    
    Unix时间戳是日期对象上的getTime()返回的值。因此,您可以将此类值添加到序列中:

    series.add(date.getTime(), value);
    
    然后,可以为某些值添加自定义标签:

    SimpleDateFormat format = new SimpleDateFormat("h a");
    renderer.addXTextLabel(date.getTime(), format.format(date.getTime()));
    

    对于静态数据,我做了如下操作::

    public class MainActivity extends Activity {
     final Calendar c = Calendar.getInstance();
            int mMinute = c.get(Calendar.MINUTE);
            int mHour = c.get(Calendar.HOUR_OF_DAY);
            int am =c.get(Calendar.AM_PM); 
           int[] x =new int[1920];
            int[] sleep = {4,3,2,1,4,3,2,1,4,3,2,1,4,1,1,1,4,4,2,2,2,3,3,2,2,2,2,2,1,1,1,1,1,1,4,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2};      
      public String getnext(int a)
      {
          String ap;
          if(am==1){ap="PM";}
          else{ap="AM";}
        String s= mHour+" "+ap;
        mMinute=mMinute+5;
    
        if (mHour >=12){
            mHour=mHour-12;
            switch(am){case 0:am=1; break; case 1:am=0;break;}
        }
            if(mMinute >= 60)
            {
                mHour= mHour+1;
                mMinute=mMinute-60;
            }
            //Log.d("Gr","mMinute: "+mMinute);
            if(mMinute==1 | mMinute==2 | mMinute==3 |mMinute==4 | mMinute==0)
            {s= mHour+" "+ap;}
            else{s="";}
    
            return (s);}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //  setContentView(R.layout.activity_main);
    
        openChart();
       }
    
    
    private void openChart(){
        XYSeries sleepSeries = new XYSeries("Sleep");
    
        for(int i=0;i<sleep.length;i++){   
            sleepSeries.add(i,sleep[i]);
        }
    
    
        // Creating a dataset to hold each series
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        // Adding Income Series to the dataset
        dataset.addSeries(sleepSeries);     
    
    
        // Creating XYSeriesRenderer to customize incomeSeries
        XYSeriesRenderer sleepRenderer = new XYSeriesRenderer();
        sleepRenderer.setColor(Color.GREEN);
        sleepRenderer.setFillPoints(true);
    
        sleepRenderer.setLineWidth((float) .2);
    
        // Creating a XYMultipleSeriesRenderer to customize the whole chart
        XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
        multiRenderer.setXLabels(0);
        multiRenderer.setYAxisMin(0);
        multiRenderer.setYLabels(0);
        multiRenderer.setYAxisMax(4);
        multiRenderer.setChartTitle("Sleep vs Time"); 
        multiRenderer.setBarSpacing(.5);
        //multiRenderer.setZoomButtonsVisible(true);
        multiRenderer.setLegendHeight((int) 5);
        multiRenderer.setPanEnabled(true, false);
    
        multiRenderer.addSeriesRenderer(sleepRenderer);
    
        // Creating an intent to plot bar chart using dataset and multipleRenderer      
        Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, renderer, Type.DEFAULT);
    
        // Start Activity
        startActivity(intent);
    
    }
    
    然后在第一个清除数据集中调用
    openChart();
    dataset.clear();

    然后调用
    repaint();

    我认为根据您的要求,创建自定义条形图将变得很容易。下面是一个示例,您可以使用这个示例开发,只需使用5个要在图形上显示的数组

    只是,仔细检查示例并检查它


    主要优点是您不需要使用任何预定义的库来绘制图表。使用简单的android用户界面,如
    TextView和ListView

    将是可能的。请您给我举个例子解释一下,先生..关于x轴上的unix时间戳..如果我理解您在这里解释的内容,先生,那么我肯定会接受您的回答,,,我有在我的代码中添加(date.getTime(),value);
    你可以检查tat.如果你不介意向我解释清楚,你的方法会感谢你,并且很高兴奖励tat赏金,我的ans在使用
    repaint()时对动态数据不起作用
    在接收到新数据时,条形图的宽度不断减小,…因此可能是问题所在@Dan::是否有API来改变多系列条形图中条形图的位置,s1、s2、s3 rae系列如果我们绘制图形,我们得到
    s1、s2、s3
    s1、s2、s3s1、s2、s3
    s1、s2、s3
    …那么还有其他方法来改变它吗根据值绘制的Y时间如下
    s1,s3,s2
    s3,s2,s1
    s1,s2,s3
    s1,s3,s2
    s3,s1,s2
    …以此类推
     static ArrayList<Integer> sleep = new ArrayList<Integer>();
    
     sleep.add(newval);