PDF axis tick data generation module
Handles tick position calculation, label formatting, and subsampling. Pure computation module - no PDF context dependency.
Initialize tick count and allocate arrays
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | plot_width | |||
| real(kind=wp), | intent(in) | :: | plot_height | |||
| integer, | intent(out) | :: | num_x_ticks | |||
| integer, | intent(out) | :: | num_y_ticks | |||
| real(kind=wp), | intent(out), | allocatable | :: | x_positions(:) | ||
| real(kind=wp), | intent(out), | allocatable | :: | y_positions(:) | ||
| character(len=50), | intent(out), | allocatable | :: | x_labels(:) | ||
| character(len=50), | intent(out), | allocatable | :: | y_labels(:) |
Generate X axis tick positions and labels
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | data_min | |||
| real(kind=wp), | intent(in) | :: | data_max | |||
| integer, | intent(inout) | :: | num_ticks | |||
| real(kind=wp), | intent(in) | :: | plot_left | |||
| real(kind=wp), | intent(in) | :: | plot_width | |||
| real(kind=wp), | intent(out) | :: | positions(:) | |||
| character(len=50), | intent(out) | :: | labels(:) | |||
| character(len=*), | intent(in), | optional | :: | scale_type | ||
| character(len=*), | intent(in), | optional | :: | date_format | ||
| real(kind=wp), | intent(in), | optional | :: | symlog_threshold | ||
| real(kind=wp), | intent(in), | optional | :: | custom_xticks(:) | ||
| character(len=*), | intent(in), | optional | :: | custom_xtick_labels(:) |
Generate Y axis tick positions and labels
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | data_min | |||
| real(kind=wp), | intent(in) | :: | data_max | |||
| integer, | intent(inout) | :: | num_ticks | |||
| real(kind=wp), | intent(in) | :: | plot_bottom | |||
| real(kind=wp), | intent(in) | :: | plot_height | |||
| real(kind=wp), | intent(out) | :: | positions(:) | |||
| character(len=50), | intent(out) | :: | labels(:) | |||
| character(len=*), | intent(in), | optional | :: | scale_type | ||
| character(len=*), | intent(in), | optional | :: | date_format | ||
| real(kind=wp), | intent(in), | optional | :: | symlog_threshold | ||
| real(kind=wp), | intent(in), | optional | :: | custom_yticks(:) | ||
| character(len=*), | intent(in), | optional | :: | custom_ytick_labels(:) |
Apply custom tick positions/labels, converting data coords to plot area coords
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=1), | intent(in) | :: | axis | |||
| real(kind=wp), | intent(in), | optional | :: | custom_xticks(:) | ||
| character(len=*), | intent(in), | optional | :: | custom_xtick_labels(:) | ||
| real(kind=wp), | intent(in), | optional | :: | custom_yticks(:) | ||
| character(len=*), | intent(in), | optional | :: | custom_ytick_labels(:) | ||
| real(kind=wp), | intent(in) | :: | data_min | |||
| real(kind=wp), | intent(in) | :: | data_max | |||
| real(kind=wp), | intent(in) | :: | plot_start | |||
| real(kind=wp), | intent(in) | :: | plot_size | |||
| integer, | intent(inout) | :: | num_ticks | |||
| real(kind=wp), | intent(out) | :: | positions(:) | |||
| character(len=50), | intent(out) | :: | labels(:) | |||
| character(len=*), | intent(in), | optional | :: | scale_type | ||
| real(kind=wp), | intent(in), | optional | :: | symlog_threshold |
Internal helper to generate axis tick positions and labels
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | data_min | |||
| real(kind=wp), | intent(in) | :: | data_max | |||
| integer, | intent(inout) | :: | num_ticks | |||
| real(kind=wp), | intent(in) | :: | plot_start | |||
| real(kind=wp), | intent(in) | :: | plot_size | |||
| real(kind=wp), | intent(out) | :: | positions(:) | |||
| character(len=50), | intent(out) | :: | labels(:) | |||
| character(len=*), | intent(in), | optional | :: | scale_type | ||
| character(len=*), | intent(in), | optional | :: | date_format | ||
| real(kind=wp), | intent(in), | optional | :: | symlog_threshold | ||
| character(len=1), | intent(in) | :: | axis | |||
| real(kind=wp), | intent(in), | optional | :: | custom_xticks(:) | ||
| character(len=*), | intent(in), | optional | :: | custom_xtick_labels(:) | ||
| real(kind=wp), | intent(in), | optional | :: | custom_yticks(:) | ||
| character(len=*), | intent(in), | optional | :: | custom_ytick_labels(:) |
Subsample ticks in transformed coordinate space for proportional visual spacing.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(inout), | contiguous | :: | tvals(:) | ||
| integer, | intent(in) | :: | nt | |||
| integer, | intent(in) | :: | max_ticks | |||
| character(len=*), | intent(in) | :: | scale | |||
| real(kind=wp), | intent(in) | :: | threshold |
Fill tick positions and labels arrays
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in), | contiguous | :: | tvals(:) | ||
| integer, | intent(in) | :: | nt | |||
| real(kind=wp), | intent(in) | :: | data_min | |||
| real(kind=wp), | intent(in) | :: | data_max | |||
| real(kind=wp), | intent(in) | :: | plot_start | |||
| real(kind=wp), | intent(in) | :: | plot_size | |||
| integer, | intent(in) | :: | num_ticks | |||
| real(kind=wp), | intent(out) | :: | positions(:) | |||
| character(len=50), | intent(out) | :: | labels(:) | |||
| character(len=*), | intent(in) | :: | scale | |||
| real(kind=wp), | intent(in) | :: | threshold | |||
| character(len=*), | intent(in), | optional | :: | date_format |
Handle ticks for zero or near-zero range data
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | data_value | |||
| integer, | intent(in) | :: | num_ticks | |||
| real(kind=wp), | intent(in) | :: | center_position | |||
| real(kind=wp), | intent(out) | :: | positions(:) | |||
| character(len=50), | intent(out) | :: | labels(:) | |||
| character(len=*), | intent(in), | optional | :: | scale_type | ||
| character(len=*), | intent(in), | optional | :: | date_format |