histgram.pde

/*
Uttegning av et histogram fra datasett DS, 
plassert med Top,Left,Width,Height
*/
void tegnHistogram(datasett DS,
                   float L,float T,float W,float H){
  pushMatrix();
  pushStyle();
  textSize(10);
  // konstanter som gir oss rammer for tegningen
  int marginL=30;
  int marginT=50;
  int marginR=10;
  int marginB=30;
  translate(L,T);
  // ram det inn
  rect(0,0,W-1,H-1);
  // noen variable for å lette resonnementet
  // indre rektangel innenfor margene
  float innerL=marginL;
  float innerT=marginT;
  float innerH=H-marginT-marginB;
  float innerW=W-marginL-marginR;
  float innerB=H-marginB;
  
  // legger til 10 for å få en 
  // markering over største verdi
  float maxVerdi=DS.getMaxVerdi()+10;
  
  // x-aksen med søyler
  line(innerL,innerB,innerL+innerW,innerB);
  int antall=DS.getAntallVerdier();
  float dx=innerW/antall;
  for(int i=0; i< antall; i++){
    float yval=map(DS.getVerdi(i),0,maxVerdi,0,innerH);
    fill(DS.getFarge(i));
    rect(innerL+i*dx+1,innerB-1,dx,-yval);
    // under søylen og aksen
    textAlign(CENTER,TOP);
    fill(0);
    text(DS.getNavn(i),innerL+i*dx+dx/2,innerB+10);
    // over søylen
    textAlign(CENTER,BOTTOM);
    fill(0);
    // formaterer med en desimal
    text(String.format("%.1f", DS.getVerdi(i)),
       innerL+i*dx+dx/2,innerB-yval);
  }
  // y-aksen
  line(innerL,innerT,innerL,innerT+innerH);
  // marker hver 10.
  for(int i=0; i <= maxVerdi; i+=10){
    float yval=map(i,0,maxVerdi,0,innerH);
    stroke(200);
    line(innerL,innerB-yval,innerL+innerW,innerB-yval);
    textAlign(RIGHT,CENTER);
    fill(0);
    text(""+i,innerL-2,innerB-yval);
  }
  
  // tittel
  textAlign(CENTER,TOP);
  textSize(15);
  fill(0);
  text(DS.getTittel(),W/2,5);
  popStyle();
  popMatrix();
}