xref: /petsc/src/sys/classes/draw/tests/ex12.c (revision a69119a591a03a9d906b29c0a4e9802e4d7c9795)
1 
2 static char help[] = "Makes a simple bar graph.\n";
3 
4 #include <petscsys.h>
5 #include <petscdraw.h>
6 
7 int main(int argc, char **argv) {
8   PetscDraw         draw;
9   PetscDrawBar      bar;
10   PetscDrawAxis     axis;
11   int               color = PETSC_DRAW_ROTATE;
12   const char       *xlabel, *ylabel, *toplabel;
13   const PetscReal   values[]  = {.3, .5, .05, .11};
14   const char *const labels[]  = {"A", "B", "C", "D", NULL};
15   PetscReal         limits[2] = {0, 0.55};
16   PetscInt          nlimits   = 2;
17   PetscBool         nolabels, setlimits;
18 
19   xlabel   = "X-axis Label";
20   toplabel = "Top Label";
21   ylabel   = "Y-axis Label";
22 
23   PetscFunctionBeginUser;
24   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
25   PetscCall(PetscOptionsHasName(NULL, NULL, "-nolabels", &nolabels));
26   if (nolabels) {
27     xlabel   = NULL;
28     ylabel   = NULL;
29     toplabel = NULL;
30   }
31   PetscCall(PetscOptionsGetRealArray(NULL, NULL, "-limits", limits, &nlimits, &setlimits));
32 
33   PetscCall(PetscDrawCreate(PETSC_COMM_WORLD, NULL, "Title", PETSC_DECIDE, PETSC_DECIDE, 400, 300, &draw));
34   PetscCall(PetscDrawSetFromOptions(draw));
35   PetscCall(PetscDrawBarCreate(draw, &bar));
36 
37   PetscCall(PetscDrawBarGetAxis(bar, &axis));
38   PetscCall(PetscDrawAxisSetColors(axis, PETSC_DRAW_BLACK, PETSC_DRAW_RED, PETSC_DRAW_BLUE));
39   PetscCall(PetscDrawAxisSetLabels(axis, toplabel, xlabel, ylabel));
40   PetscCall(PetscDrawBarSetColor(bar, color));
41   PetscCall(PetscDrawBarSetFromOptions(bar));
42 
43   if (setlimits) PetscCall(PetscDrawBarSetLimits(bar, limits[0], limits[1]));
44   PetscCall(PetscDrawBarSetData(bar, 4, values, labels));
45   PetscCall(PetscDrawBarDraw(bar));
46   PetscCall(PetscDrawBarSave(bar));
47 
48   PetscCall(PetscDrawBarDestroy(&bar));
49   PetscCall(PetscDrawDestroy(&draw));
50   PetscCall(PetscFinalize());
51   return 0;
52 }
53 
54 /*TEST
55 
56    build:
57      requires: x
58 
59    test:
60      output_file: output/ex1_1.out
61 
62 TEST*/
63