[rrd-users] rrdgraph: Negative values with --logarithmic

Christian Garbs mitch at cgarbs.de
Sun Oct 16 21:31:18 CEST 2016

Hi there,

looking through the mailing list archive, I found several requests
like mine over the last years:

"Why won't negative values show up in my graph when I use --lograrithmic?"

The answer was mostly that a logarithm is not defined for negative

What I want to achieve (and what I think those other proponents also
had in mind) is that I essentially have some of my data mirrored at
the x-axis for better readability (don't draw two values on top of
each other).

For example I plot outgoing packets on my network as a positive values
while I plot the incoming packets via CDEF:output=0,outputx,- as
negative values.  So the outgoing rate is shown above the x-axis and
the incoming rate below the x-axis.

To tame network spikes somewhat I want to change the graph mode to
logarithmic.  This works for the positive values, but the negative
values simply vanish.  I just want the same transormation that happens
to the positive values applied 'mirrored' the the negative values.

Think of something like a "display-logarithm" function defined like

double disp_log(double y)
	if (y == 0) {
		return 0;
	} else if (y > 0) {
		return log(y);
	} else {
		return -log(-y);

While "-log(-y)" might look weird in a mathematical context I think that
it makes sense in describing "do the same as for positive values, only
in the other direction".

I have had a look at rrdgraph.c and think that I found the calculation
of the final y value for a given data point in the ytr() method.  But
I did not yet fully figure out how im->minval is computed (im->minval
seems to be the reason for negative values to be cut off).

(And if this makes sense at all, it should be probably be controlled
 by a commandline parametera and I have not yet started to look what
 else needs to be changed then: commandline parsing, internal
 configuration state, manpages, documentation...)

What do you think of this?
Would the be a useful feature?
Could this somehow be implemented?


='__   _~-.
     \'  ~-`\._

More information about the rrd-users mailing list