Quiver lets you plot custom mathematical expressions and specify filter conditions using formulas. We support the following constructs in formulas:
6, 3.14159, -128, Quiver also supports scientific notation: 1.602e-19.$ sign: $A refers to the plot with parameter name A, and $A + $B calculates the sum of the two plots.true and false when using logical operators.secondsSince("time") and millisecondsSince("time"). The time term needs to be in ISO-8601 format ↗. For example, secondsSince("1970-01-01T00:00:00+00:00") evaluates to the number of seconds since January 1st, 1970 in UTC.+, -, *, /, and the remainder operator %: 10 % 7 evaluates to 3. You could also use parentheses () to enforce precedence. These operators produce double precision numbers as results.
^ to do power operations. See the pow function below in Built-in Functions to do powers.== for equality, != for inequality, and >, <, >=, <= for comparisons. These operators produce Boolean values as results.&&) and logical OR (||) operators. Quiver also supports the logical NOT operator (!), which inverts a Boolean value.&), bitwise OR (|), bitwise XOR (^), and bitwise NOT (~) on numeric values. You can also perform bitwise shifts: << for left shift, >> for sign-preserving arithmetic right shift, and >>> for 0-padded logical right shift.Quiver supports the following list of built-in mathematical functions:
| Function Name | Description |
|---|---|
abs(a) | absolute value |
acos(a) | inverse cosine |
acosh(a) | inverse hyperbolic cosine |
asin(a) | inverse sine |
asinh(a) | inverse hyperbolic sine |
atan(a) | inverse tangent |
atanh(a) | inverse hyperbolic tangent |
atan2(a, b) | inverse tangent of two numbers (four-quadrant arc tangent); a is the y coordinate, b is the x coordinate. |
cbrt(a) | cube root |
ceil(a) | ceiling |
cos(a) | cosine |
cosh(a) | hyperbolic cosine |
exp(a) | natural exponential |
floor(a) | floor |
isfinite(a) | true if argument is neither infinite nor NaN |
isnan(a) | true if argument is NaN |
ln(a) | natural logarithm |
log10(a) | base 10 logarithm |
log2(a) | base 2 logarithm |
max(a, b, ...) | maximum of all given inputs |
min(a, b, ...) | minimum of all given inputs |
pow(a, b) | a to the power of b |
round(a) | round to the nearest integer |
signum(a) | sign function |
sin(a) | sine |
sinh(a) | hyperbolic sine |
sqrt(a) | square root |
tan(a) | tangent |
tanh(a) | hyperbolic tangent |
Quiver supports the ternary operator a ? b : c to express “if a then b else c”. For example, at each point in time, $A > 0 ? $B * 10 : $C * 10 takes on the value of $B * 10 if the value of $A is greater than 0 at that time; otherwise, it takes on the value of $C * 10.
You can also use the NaN value to return an alternative value where the input series is missing values. For example, at each point in time, @M != NaN ? @M : @K takes on the value of @M if it has a numeric value; otherwise, it takes on the value of @K.
You can use the return and skip statements to stop “early”, and either return a value or indicate that no value should be returned (e.g. to filter out a point).
Variables are declared with the var keyword. The = sign is used to assign a value to a variable. Variables are numbers (double precision), booleans, or strings.
var a = 6;
var b = 3.14159;
var c = 1.602e-19; // Exponential notation is supported
var d = 1.602E-19; // Exponents are not case-sensitive
var boolean_example = true;
var boolean_example = false; // re-assign to false
var string_example = "high";
You can combine literals and variables into more complicated expressions.
The basic mathematical operators are +, -, *, /. To calculate a remainder, use %.
var a = 2 + 2; // a has value 4
a = 3 * 7; // a has value 21
a = 3.5 / 7; // a has value 0.5
a = 10 % 7; // a has value 3
Operator precedence is as expected. You can use parentheses ( ) to group expressions together.
var a = 5 + 3 * 2; // a has value 11
var b = (5 + 3) * 2; // b has value 16
You can also use assignment versions of the five operators listed above.
var a = 10;
a *= 2; // a now has value 20
a += 3; // a now has value 23
a -= 5; // a now have value 18
a /= 3; // a now has value 6
a %= 5; // a now has value 1
You can compare numbers using the comparison operators <, <=, >, >=. These operators produce a Boolean (true or false) result.
Equality can be checked with ==, and inequality with !=.
These expressions can then be combined with logical operators && and ||.
You can use the ! operator to invert a Boolean result (true becomes false, false becomes true).
Equality can be checked with ==, and inequality with !=.
var a = "high";
var b = "low";
// compare values
var c = a == a; // true
var d = a != b; // true