9
votes

Bar graphique à l'aide de la bibliothèque AcharTengine

J'ai un graphique à barres à l'aide de AcharTengine code> Library comme indiqué ci-dessous ::

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


0 commentaires

3 Réponses :


4
votes

Vous pouvez conserver des horodatages Unix sur l'axe X et contrôler les étiquettes vous-même. Vous pouvez ajouter des étiquettes à axes X personnalisées à l'aide de:

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


5 commentaires

S'il vous plaît pouvez-vous m'expliquer avec un exemple monsieur..regarde des horodatages UNIX sur l'axe x ..


Si j'avais compris que tu as expliqué ici monsieur, alors j'accepterais sûrement votre réponse , je n'ai pas utilisé votre méthode série.add (date.gettime (), valeur); dans mon code u peut il suffit de vérifier tat ..Si vous ne vous dérangerez pas de m'expliquer clairement que votre méthode sera reconnaissante pour vous et primer joyeusement la prime TAT


et mes ANS ne fonctionnent pas bien pour les données dynamiques, lorsque j'utilise repeindre (); sur la réception de nouvelles données, la largeur de la barrette continue à diminuer, si wat peut être le problème


Voici comment le graphique ressemble lorsque je passe de nouvelles données et repeindre


@ Dan :: Y a-t-il une API de changer de position de barres dans Multi Series Bar graphique, S1, S2, S3 Rae Series Si nous introduisons le graphique, nous obtenons S1, S2, S2, S2 S1, S2 , S3 S1, S2, S3 S1, S2, S3 .... Donc y a-t-il de toute façon pour le changer à chaque fois sur la valeur de la valeur Ce S1, S3, S2 S3, S2, S1, S1 S1, S2, S3 S1, S3, S2 < Code> S3, S1, S2 ... Donc sur



5
votes

J'ai fait quelque chose comme ceci :: Pour des données statiques xxx

J'ai un graphique comme

 df

update :::

pour les données de temps réel, des séries de mise à jour comme xxx

comme et Lorsque NewVal est disponible xxx

puis appelez openchart (); dans ce premier jeu de données clair ( DataSet.clear (); ) puis appelez repeindre ();


0 commentaires

0
votes

Je pense que pour votre besoin, la création de cartes à barres personnalisées facilitera Easy.here est l'exemple, vous pouvez développer avec cet exemple en utilisant simplement 5 tableaux que vous souhaitez afficher sur le graphique.

graphique à barres dans Android sans pots intégrés

Juste, allez à approfondir l'exemple et vérifiez-le.

L'avantage principal est que vous n'avez pas besoin d'utiliser des bibliothèques prédéfinies pour dessiner des diagrammes. Il sera possible avec une simple interface utilisateur android comme textview and listview


0 commentaires