2013-04-01 2 views
9

У меня есть гистограмму с помощью AChartEngine библиотеки, как показано ниже ::гистограмма с помощью 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; 
} 
} 

Над кодом графика выглядит следующим образом:

pic http://i49.tinypic.com/2j5xhrs.png

Но мне нужно нарисовать график со следующим имуществом:

  1. Ось X должна будет отображать текущее время. показано ниже Время графика некоторые, где> 2 утра
  2. каждый бар в X-оси составляет 5 минут бара
  3. за каждые 5 минут я отправить данные, которые он должен рисовать бар, основанный на стоимости.
  4. сейчас игнорировать Y параметр оси просто необходимо, как построить требуется X-aixs

график некоторые, что выглядит следующим образом:

pic http://i46.tinypic.com/13ypbw7.png

ответ

4

Вы можете держать Unix метки на X оси и сами контролируйте этикетки. Вы можете добавить пользовательские метки осей 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())); 
+0

, пожалуйста, объясните мне с помощью примера сэр. Отметьте отметки времени unix по оси x. – Kiran

+0

См. мой отредактированный ответ. –

+0

ya thanks попробует – Kiran

5

я сделал что-то вроде этого :: для статических данных

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); 

} 

я получил график как

df http://i50.tinypic.com/jqtlpl.png

UPDATE :::

для реальных данных времени, обновление серии как

static ArrayList<Integer> sleep = new ArrayList<Integer>(); 

, как и когда newval доступен

sleep.add(newval); 

затем вызвать openChart(); в этом первом ясном наборе данных (dataset.clear();) затем позвонить по телефону repaint();

0

Я думаю, что для вашего требования создание пользовательских диаграмм диаграмм упростится. Вот пример, вы можете разработать с помощью этого примера, просто используя 5 массивов, которые вы хотите показать на графике.

Bar Chart in Android With out any Built in jars

Просто перейдите тщательно пример и проверить его.

Главное преимущество - не нужно использовать какие-либо предопределенные библиотеки для рисования диаграмм. это возможно с помощью простого андроида UI, например TextView and ListView

Смежные вопросы