Separate positioning for tick labels vs axis labels Follows matplotlib exact spacing measurements
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public, | parameter | :: | LABEL_SPACING_X | = | 20 | |
| integer, | public, | parameter | :: | LABEL_SPACING_Y | = | 15 | 
Calculate X-axis label position with matplotlib-style centering and spacing
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | tick_x | |||
| real(kind=wp), | intent(in) | :: | plot_bottom | |||
| real(kind=wp), | intent(in) | :: | plot_height | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate Y-axis label position with right alignment and proper spacing
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | tick_y | |||
| real(kind=wp), | intent(in) | :: | plot_left | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate X-axis tick label position using proper font metrics and matplotlib spacing
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | tick_x | |||
| real(kind=wp), | intent(in) | :: | plot_bottom | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate Y-axis tick label position using proper font metrics
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | tick_y | |||
| real(kind=wp), | intent(in) | :: | plot_left | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate X-axis label position (40px below plot)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | center_x | |||
| real(kind=wp), | intent(in) | :: | plot_bottom | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate Y-axis label position with proper spacing from tick labels
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | center_y | |||
| real(kind=wp), | intent(in) | :: | plot_left | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate X-axis tick label position for PDF (Y=0 at bottom, increases upward)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | tick_x | |||
| real(kind=wp), | intent(in) | :: | plot_bottom | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y | 
Calculate Y-axis tick label position for PDF (Y=0 at bottom, increases upward)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | tick_y | |||
| real(kind=wp), | intent(in) | :: | plot_left | |||
| character(len=*), | intent(in) | :: | label_text | |||
| real(kind=wp), | intent(out) | :: | label_x | |||
| real(kind=wp), | intent(out) | :: | label_y |