2013-02-19 3 views
1

J'ai besoin de dessiner des boucles d'hystérésis, puis de calculer la zone fermée dans la boucle. J'utilise jFreeChart.Tracé d'une boucle d'hystérésis avec jFreeChart

considèrent les données suivantes:

hyst[0]=0; 
     hyst[1]=0; 
     hyst[2]=0.0098; 
     hyst[3]=0.0196; 
     hyst[4]=0.0489; 
     hyst[5]=0.0879; 
     hyst[6]=0.0684; 
     hyst[7]=0.0489; 
     hyst[8]=0.0196; 
     hyst[9]=0.0098; 
     hyst[10]=0; 
     hyst[11]=0; 
     hyst[12]=0; 
     hyst[13]=0; 
     hyst[14]=0; 
     hyst[15]=-0.0195; 
     hyst[16]=-0.0488; 
     hyst[17]=-0.0391; 
     hyst[18]=-0.0195; 
     hyst[19]=0; 
     hyst[20]=0; 

Lorsque je tente:

public void plotHysteresis() 
    { 
     int j=0; 
     int i=0; 
     XYSeries series1 = new XYSeries("Before Treatment"); 
     // DefaultCategoryDataset series1 = new DefaultCategoryDataset(); 
     for(i=0;i<6;i++) 
     {  
     series1.add(j,hyst[i]); 
     logTextArea.append(Integer.toString(j) +" : " +Double.toString(hyst[i])+"\n"); 
     j=j+5; 
     } 
     j=j-5; 
     for(;i<11;i++) 
     { 
     j=j-5; 
     series1.add(j,hyst[i]); 
     logTextArea.append(Integer.toString(j) +" : " +Double.toString(hyst[i])+"\n"); 
     } 
     for(;i<16;i++) 
     { 
     j=j-5; 
     series1.add(j,hyst[i]); 
     logTextArea.append(Integer.toString(j) +" : " +Double.toString(hyst[i])+"\n"); 
     } 
      for(;i<21;i++) 
     { 
     j=j+5; 
     series1.add(j,hyst[i]); 
     logTextArea.append(Integer.toString(j) +" : " +Double.toString(hyst[i])+"\n"); 
     } 

    XYSeriesCollection dataset = new XYSeriesCollection(); 
    dataset.addSeries(series1); 

    JFreeChart chart = ChartFactory.createXYAreaChart(
"Hysteresis Plot", // chart title 
"Pounds (lb)", // x axis label 
"Distance (inches)", // y axis label 
dataset, // data 
PlotOrientation.VERTICAL, 
true, // include legend 
true, // tooltips 
false // urls 
); 
    chart.setBackgroundPaint(Color.white); 

    ChartPanel frame = new ChartPanel(chart); 
    frame.setVisible(true); 
    frame.setSize(plotPanel.getWidth(),plotPanel.getHeight()); 
    plotPanel.add(frame); 
    plotPanel.repaint(); 
    } 

Il me donne ci-dessous résultat:

enter image description here

Si j'utilise:

JFreeChart chart = ChartFactory.createXYLineChart(
"Hysteresis Plot", // chart title 
"Pounds (lb)", // x axis label 
"Distance (inches)", // y axis label 
dataset, // data 
PlotOrientation.VERTICAL, 
true, // include legend 
true, // tooltips 
false // urls 
); 

I donne:

enter image description here

je besoin d'une parcelle d'hystérésis qui ressemble à: enter image description here

Je pense que la différence est la façon dont les points sont reliés. S'il vous plaît guider comment obtenir la boucle d'hystérésis souhaitée avec jFreeChart, puis comment calculer la zone ci-jointe.

Merci

+1

Vous pouvez tracer deux lignes XYLine: une pour la ligne supérieure et une pour la ligne inférieure. – assylias

+0

@assylias Y a-t-il une autre solution, au lieu d'utiliser deux lignes? J'ai besoin de tracer beaucoup de tels diagrammes d'hystérésis pour différentes lectures obtenues pour hyst [23] et j'ai besoin de les superposer sur le même graphe et de comparer les changements de zone inclus .. –

+0

Quelques idées pour la zone sont mentionnées [ici] (http: // stackoverflow .com/q/14175685/230513). – trashgod

Répondre

1

Comment puis-je changer la couleur de la ligne et les symboles représentant les points de données. Je veux que tous soient uniformes.

Il semble que vous ayez choisi JFreeChart pour votre vue. Quelques autres synthétisation d'un commentaire,

  • Vous pouvez faire les couleurs et les formes de votre plusieurs séries homogènes en fournissant un DrawingSupplier, comme l'a suggéré here et montré here. Vous pouvez combiner la série en GeneralPath et estimer la zone comme indiqué here.

Questions connexes