Picviz Advanced

Picviz has advanced features, such as filters. Filters can help to understand data you are dealing with by reducing the amount of data you want to display. You can either show or hide data on a specific axis.

Filters

If you want to filter the input value, you can use pattern matching (slow) or do direct string comparison.

The filter syntax is the following: display type relation (string|integer|percentage) axis number and|or ... .

Where:

  • display: Can be show or hide. show will only show wanted data, where hide will, well.. hide them.
  • type: Can be value, plot (more coming later). Filter data on their originate value, or according to the way they are rendered.
  • relation: Can be =, !=, >, <, <= or >=. To give a relation on data you want to see.
  • string: Can be anything you want to sort, can contain regular expression if you use the pcre module (-Wpcre).
  • integer: Y value you want to select on the given axis.
  • number: Axis number you want your filter to apply.
  • percentage: The percentage of what you see displayed

Examples

To show only data starting with the value foo on the third axis:

pcv -Tsvg -Wpcre samples/test1.pcv 'show value = "foo.*" on axis 3'

Will result in:

You can try by yourself filtering the nmap scan provided as examples in Picviz sources (samples/network-scan/):

To original image is:

We apply a filter:

pcv -Tplplot nmap-scan.pcv 'show plot > 250 on axis 3'

Since our page is 500 pixels height, using 50% is exactly the same:

pcv -Tplplot nmap-scan.pcv 'show plot > 50% on axis 3'

and the result:

Engine

The engine section allows some great tricks, such as changing the string positioning algorithm.

data {
    axis1="123", axis2="Flanders";
    axis1="123", axis2="Bart";
    axis1="123", axis2="Lisa";
    axis1="123", axis2="Homer";
    axis1="123", axis2="Marge";
}

Default

By default, previous strings are drawn like this:

Relative

To activate the relative mode, add the following after the header section:

engine {
    relative = "1";
}

Using the relative mode, strings are positioned as far possible from each other:

Basic

Or, you can use the basic algorithm, which is not collision-proof but the best to show scanning activities:

engine {
    string_algo = "basic";
}

Which will draw:

Attachments