logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

notcurses_plot - high level widget for plotting

Authors

       nick black <nickblack@linux.com>.

                                                     v3.0.7                                    notcurses_plot(3)

Description

       These functions support histograms.  The independent variable is always an uint64_t.  The samples are ei‐
       ther uint64_ts (ncuplot) or doubles (ncdplot).  Only a window over the samples is retained at  any  given
       time,  and  this  window  can only move towards larger values of the independent variable.  The window is
       moved forward whenever an x larger than the  current  window's  maximum  is  supplied  to  add_sample  or
       set_sample.

       add_sample  increments  the  current value corresponding to this x by y.  set_sample replaces the current
       value corresponding to this x.

       If rangex is 0, or larger than the bound plane will support, it is capped to the  available  space.   The
       domain  can either be specified as miny and maxy, or domain autodetection can be invoked via setting both
       to 0.  If the domain is specified, samples outside the domain are an error, and do not contribute to  the
       plot.  Supplying an x below the current window is an error, and has no effect.

       More  granular block glyphs means more resolution in your plots, but they can be difficult to differenti‐
       ate at small text sizes.  Sextants and Braille allow for more resolution on the independent variable.  It
       can be difficult to predict how the Braille glyphs will look in a given font.

       The same ncplot_options struct can be used with all ncplot types.  The flags field is a bitmask  composed
       of:

       • NCPLOT_OPTION_LABELTICKSD: Label dependent axis ticks

       • NCPLOT_OPTION_EXPONENTIALD: Use an exponential dependent axis

       • NCPLOT_OPTION_VERTICALI: Vertical independent axis

       • NCPLOT_OPTION_NODEGRADE: Fail rather than degrade blitter

       • NCPLOT_OPTION_DETECTMAXONLY: Detect only max domain, not min

       • NCPLOT_OPTION_PRINTSAMPLE: Print the most recent sample

       If NCPLOT_OPTION_LABELTICKSD or NCPLOT_OPTION_PRINTSAMPLE is supplied, the legendstyle field will be used
       to style the labels.  It is otherwise ignored.

       The  label is printed in the upper left, immediately to the right of the topmost axis tick (if NCPLOT_OP‐TION_LABELTICKSD was used).  The most recent sample is printed opposite from the label along the indepen‐
       dent axis (if NCPLOT_OPTION_PRINTSAMPLE was used).

Name

       notcurses_plot - high level widget for plotting

Notes

NCPLOT_OPTION_VERTICALI is not yet implemented.

Return Values

create will return an error if miny equals maxy, but they are non-zero.  It will also return an error  if
       maxy < miny.  An invalid gridtype will result in an error.

       plane returns the ncplane on which the plot is drawn.  It cannot fail.

See Also

notcurses(3), notcurses_plane(3), notcurses_visual(3)

Synopsis

#include<notcurses/notcurses.h>

              #define NCPLOT_OPTION_LABELTICKSD   0x0001u
              #define NCPLOT_OPTION_EXPONENTIALD  0x0002u
              #define NCPLOT_OPTION_VERTICALI     0x0004u
              #define NCPLOT_OPTION_NODEGRADE     0x0008u
              #define NCPLOT_OPTION_DETECTMAXONLY 0x0010u
              #define NCPLOT_OPTION_PRINTSAMPLE   0x0020u

              typedef struct ncplot_options {
                // channels for the maximum and minimum levels.
                // lerp across the domain between these two.
                uint64_t maxchannels;
                uint64_t minchannels;
                // styling used for labels (NCPLOT_OPTION_LABELTICKSD)
                uint16_t legendstyle;
                // pass NCBLIT_DEFAULT maps to NCBLIT_8x1 (assuming
                // UTF8) or NCBLIT_1x1 (in an ASCII environment)
                ncblitter_e gridtype;
                // independent variable can either be a contiguous range,
                // or a finite set of keys. for a time range, say the
                // previous hour sampled with second resolution, the
                // independent variable would be the range [0..3600): 3600.
                // if rangex is 0, it is dynamically set to the number
                // of columns.
                int rangex;
                const char* title;   // optional title
                uint64_t flags;      // bitfield over NCPLOT_OPTION_*
              } ncplot_options;

       structncuplot*ncuplot_create(structncplane*n,constncplot_options*opts,uint64_tminy,uint64_tmaxy);structncdplot*ncdplot_create(structncplane*n,constncplot_options*opts,doubleminy,doublemaxy);structncplane*ncuplot_plane(structncuplot*n);structncplane*ncdplot_plane(structncdplot*n);intncuplot_add_sample(structncuplot*n,uint64_tx,uint64_ty);intncdplot_add_sample(structncdplot*n,uint64_tx,doubley);intncuplot_set_sample(structncuplot*n,uint64_tx,uint64_ty);intncdplot_set_sample(structncdplot*n,uint64_tx,doubley);intncuplot_sample(conststructncuplot*n,uint64_tx,uint64_t*y);intncdplot_sample(conststructncdplot*n,uint64_tx,double*y);voidncuplot_destroy(structncuplot*n);voidncdplot_destroy(structncdplot*n);

See Also