Actual source code: ex9.c

  1: static char help[] = "Makes a simple histogram.\n";

  3: #include <petscsys.h>
  4: #include <petscdraw.h>

  6: int main(int argc, char **argv)
  7: {
  8:   PetscDraw     draw;
  9:   PetscDrawHG   hist;
 10:   PetscDrawAxis axis;
 11:   int           n = 20, i, x = 0, y = 0, width = 400, height = 300, bins = 8;
 12:   PetscInt      w = 400, h = 300, nn = 20, b = 8, c = PETSC_DRAW_GREEN;
 13:   int           color = PETSC_DRAW_GREEN;
 14:   const char   *xlabel, *ylabel, *toplabel;
 15:   PetscReal     xd;
 16:   PetscBool     flg;

 18:   xlabel   = "X-axis Label";
 19:   toplabel = "Top Label";
 20:   ylabel   = "Y-axis Label";

 22:   PetscFunctionBeginUser;
 23:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 24:   PetscCall(PetscOptionsGetInt(NULL, NULL, "-width", &w, NULL));
 25:   PetscCall(PetscOptionsGetInt(NULL, NULL, "-height", &h, NULL));
 26:   PetscCall(PetscOptionsGetInt(NULL, NULL, "-n", &nn, NULL));
 27:   PetscCall(PetscOptionsGetInt(NULL, NULL, "-bins", &b, NULL));
 28:   PetscCall(PetscOptionsGetInt(NULL, NULL, "-color", &c, NULL));
 29:   PetscCall(PetscOptionsHasName(NULL, NULL, "-nolabels", &flg));
 30:   width  = (int)w;
 31:   height = (int)h;
 32:   n      = (int)nn;
 33:   bins   = (int)b;
 34:   color  = (int)c;
 35:   if (flg) {
 36:     xlabel   = NULL;
 37:     ylabel   = NULL;
 38:     toplabel = NULL;
 39:   }

 41:   PetscCall(PetscDrawCreate(PETSC_COMM_WORLD, 0, "Title", x, y, width, height, &draw));
 42:   PetscCall(PetscDrawSetFromOptions(draw));
 43:   PetscCall(PetscDrawHGCreate(draw, bins, &hist));
 44:   PetscCall(PetscDrawHGSetColor(hist, color));
 45:   PetscCall(PetscDrawHGGetAxis(hist, &axis));
 46:   PetscCall(PetscDrawAxisSetColors(axis, PETSC_DRAW_BLACK, PETSC_DRAW_RED, PETSC_DRAW_BLUE));
 47:   PetscCall(PetscDrawAxisSetLabels(axis, toplabel, xlabel, ylabel));
 48:   /* PetscCall(PetscDrawHGSetFromOptions(hist)); */

 50:   for (i = 0; i < n; i++) {
 51:     xd = (PetscReal)(i - 5);
 52:     PetscCall(PetscDrawHGAddValue(hist, xd * xd));
 53:   }
 54:   PetscCall(PetscDrawHGDraw(hist));
 55:   PetscCall(PetscDrawHGSave(hist));

 57:   PetscCall(PetscDrawHGDestroy(&hist));
 58:   PetscCall(PetscDrawDestroy(&draw));
 59:   PetscCall(PetscFinalize());
 60:   return 0;
 61: }

 63: /*TEST

 65:    build:
 66:      requires: x

 68:    test:
 69:      output_file: output/ex1_1.out

 71: TEST*/