from builtins import str
import textwrap
from .. import session
from ..constant import *
from ..exception import *
from ..tecutil import sv
from .. import text
class AxisTitle(session.Style):
def __init__(self, axis):
self.axis = axis
super().__init__(axis._sv, sv.TITLE, **axis._kw)
@property
def text(self):
"""`str`: The text of the title for this axis.
Example usage::
>>> axis.title.text = 'distance (m)'
"""
return self._get_style(str, sv.TEXT)
@text.setter
def text(self, value):
self._set_style(str(value), sv.TEXT)
@property
def show(self):
"""`bool`: Place title along the axis.
Example usage::
>>> axis.title.show = False
"""
return self._get_style(bool, sv.SHOWONAXISLINE)
@show.setter
def show(self, show):
self._set_style(bool(show), sv.SHOWONAXISLINE)
@property
def position(self):
"""`float`: Percent along axis line to place title.
Example usage::
>>> axis.title.position = 50
"""
return self._get_style(float, sv.PERCENTALONGLINE)
@position.setter
def position(self, value):
self._set_style(float(value), sv.PERCENTALONGLINE)
@property
def color(self):
"""`Color`: Text color of axis title.
Example usage::
>>> from tecplot.constant import Color
>>> axis.title.color = Color.Blue
"""
return self._get_style(Color, sv.COLOR)
@color.setter
def color(self, value):
self._set_style(Color(value), sv.COLOR)
@property
def offset(self):
"""`float` in percent of frame height.: Transverse offset of the title from the axis.
Positive values are outside the axes, negative numbers
are inside the axes. Example usage::
>>> axis.title.offset = 5
"""
return self._get_style(float, sv.OFFSET)
@offset.setter
def offset(self, value):
self._set_style(float(value), sv.OFFSET)
@property
def font(self):
"""`text.Font`: Typeface and size of the text.
Example usage::
>>> axis.title.font.size = 5
"""
return text.Font(self)
[docs]
class Axis2DTitle(AxisTitle):
"""Sketch plot axis label string, font and style control.
.. code-block:: python
:emphasize-lines: 12-15
import tecplot as tp
from tecplot.constant import PlotType, Color
plot = tp.active_frame().plot(PlotType.Sketch)
viewport = plot.axes.viewport
viewport.left = 10
viewport.right = 90
viewport.bottom = 10
xaxis = plot.axes.x_axis
xaxis.show = True
xaxis.title.text = 'distance (m)'
xaxis.title.color = Color.DarkTurquoise
xaxis.title.offset = -7
tp.export.save_png('axis_title_sketch.png', 600, supersample=3)
.. figure:: /_static/images/axis_title_sketch.png
:width: 300px
:figwidth: 300px
"""
@property
def show_on_border_min(self):
"""`bool`: Draw title along the lower grid area border.
Example usage::
>>> axis.title.show_on_border_min = True
"""
return self._get_style(bool, sv.SHOWONGRIDBORDERMIN)
@show_on_border_min.setter
def show_on_border_min(self, value):
self._set_style(bool(value), sv.SHOWONGRIDBORDERMIN)
@property
def show_on_border_max(self):
"""`bool`: Draw title along the upper grid area border.
Example usage::
>>> axis.title.show_on_border_max = True
"""
return self._get_style(bool, sv.SHOWONGRIDBORDERMAX)
@show_on_border_max.setter
def show_on_border_max(self, value):
self._set_style(bool(value), sv.SHOWONGRIDBORDERMAX)
class Axis3DTitle(AxisTitle):
@property
def show_on_opposite_edge(self):
"""`bool`: Draw the title on the opposite edge of the grid.
Example usage::
>>> axis.title.show_on_opposite_edge = True
"""
return self._get_style(bool, sv.SHOWONOPPOSITEEDGE)
@show_on_opposite_edge.setter
def show_on_opposite_edge(self, value):
self._set_style(bool(value), sv.SHOWONOPPOSITEEDGE)
class DataAxisTitle(AxisTitle):
@property
def title_mode(self):
"""`AxisTitleMode`: Define the source for the axis title.
Possible values: `AxisTitleMode.UseText` or `AxisTitleMode.UseVarName`.
Example usage::
>>> from tecplot.constant import AxisTitleMode
>>> axis.title.title_mode = AxisTitleMode.UseVarName
"""
return self._get_style(AxisTitleMode, sv.TITLEMODE)
@title_mode.setter
def title_mode(self, value):
value = AxisTitleMode(value)
if __debug__:
if value not in [AxisTitleMode.UseText, AxisTitleMode.UseVarName]:
msg = textwrap.dedent('''\
title_mode must be one of: AxisTitleMode.UseText,
AxisTitleMode.UseVarName.''')
raise TecplotLogicError(msg)
self._set_style(value, sv.TITLEMODE)
@property
def text(self):
"""`str`: The text of the title for this axis.
The ``title_mode`` attribute must be set to `AxisTitleMode.UseText`::
>>> from tecplot.constant import AxisTitleMode
>>> axis.title.title_mode = AxisTitleMode.UseText
>>> axis.title.text = 'distance (m)'
"""
return self._get_style(str, sv.TEXT)
@text.setter
def text(self, value):
self._set_style(str(value), sv.TEXT)
[docs]
class DataAxis2DTitle(DataAxisTitle, Axis2DTitle):
"""Axis label string, font and style control for 2D data plots.
.. code-block:: python
:emphasize-lines: 20-22,25,28-30,33
from os import path
import tecplot as tp
from tecplot.constant import PlotType, SurfacesToPlot, Color, AxisTitleMode
examples_dir = tp.session.tecplot_examples_directory()
infile = path.join(examples_dir, 'SimpleData', 'F18.plt')
dataset = tp.data.load_tecplot(infile)
plot = tp.active_frame().plot(PlotType.Cartesian2D)
plot.activate()
plot.show_contour = True
plot.contour(0).variable = dataset.variable('S')
plot.contour(0).colormap_name = 'Sequential - Yellow/Green/Blue'
plot.contour(0).legend.show = False
plot.fieldmap(0).surfaces.surfaces_to_plot = SurfacesToPlot.BoundaryFaces
xaxis = plot.axes.x_axis
xaxis.title.title_mode = AxisTitleMode.UseText
xaxis.title.text = 'Longitudinal (m)'
xaxis.title.color = Color.Blue
# place the x-axis title at the x-coordinate 10.0
xaxis.title.position = 100 * (10.0 - xaxis.min) / (xaxis.max - xaxis.min)
yaxis = plot.axes.y_axis
yaxis.title.title_mode = AxisTitleMode.UseText
yaxis.title.text = 'Transverse (m)'
yaxis.title.color = Color.Blue
# place the y-axis title at the y-coordinate 0.0
yaxis.title.position = 100 * (0.0 - yaxis.min) / (yaxis.max - yaxis.min)
tp.export.save_png('axis_title_2d.png', 600, supersample=3)
.. figure:: /_static/images/axis_title_2d.png
:width: 300px
:figwidth: 300px
"""
[docs]
class DataAxis3DTitle(DataAxisTitle, Axis3DTitle):
"""Axis label string, font and style control for 3D plots.
.. code-block:: python
:emphasize-lines: 21-24,28-31,35-38
from os import path
import tecplot as tp
from tecplot.constant import PlotType, SurfacesToPlot, Color, AxisTitleMode
examples_dir = tp.session.tecplot_examples_directory()
infile = path.join(examples_dir, 'SimpleData', 'F18.plt')
dataset = tp.data.load_tecplot(infile)
plot = tp.active_frame().plot(PlotType.Cartesian3D)
plot.activate()
plot.show_contour = True
plot.contour(0).variable = dataset.variable('S')
plot.contour(0).colormap_name = 'Sequential - Yellow/Green/Blue'
plot.contour(0).legend.show = False
plot.fieldmap(0).surfaces.surfaces_to_plot = SurfacesToPlot.BoundaryFaces
xaxis = plot.axes.x_axis
xaxis.show = True
xaxis.title.title_mode = AxisTitleMode.UseText
xaxis.title.text = 'Longitudinal (m)'
xaxis.title.color = Color.BluePurple
xaxis.title.position = 10
yaxis = plot.axes.y_axis
yaxis.show = True
yaxis.title.title_mode = AxisTitleMode.UseText
yaxis.title.text = 'Transverse (m)'
yaxis.title.color = Color.BluePurple
yaxis.title.position = 90
zaxis = plot.axes.z_axis
zaxis.show = True
zaxis.title.title_mode = AxisTitleMode.UseText
zaxis.title.text = 'Height (m)'
zaxis.title.color = Color.BluePurple
zaxis.title.offset = 13
plot.view.fit()
tp.export.save_png('axis_title_3d.png', 600, supersample=3)
.. figure:: /_static/images/axis_title_3d.png
:width: 300px
:figwidth: 300px
"""
[docs]
class RadialAxisTitle(DataAxis2DTitle):
"""Radial axis label string, font and style control for polar plots.
.. code-block:: python
:emphasize-lines: 29-33
import numpy as np
import tecplot as tp
from tecplot.constant import PlotType, Color, AxisTitleMode
npoints = 300
r = np.linspace(0, 2000, npoints)
theta = np.linspace(0, 1000, npoints)
frame = tp.active_frame()
dataset = frame.create_dataset('Data', ['R', 'Theta'])
zone = dataset.add_ordered_zone('Zone', (300,))
zone.values('R')[:] = r
zone.values('Theta')[:] = theta
plot = frame.plot(PlotType.PolarLine)
plot.activate()
plot.axes.r_axis.max = np.max(r)
plot.delete_linemaps()
lmap = plot.add_linemap('Linemap', zone, dataset.variable('R'),
dataset.variable('Theta'))
lmap.line.line_thickness = 0.8
raxis = plot.axes.r_axis
raxis.line.show_both_directions = True
raxis.line.show_perpendicular = True
raxis.title.title_mode = AxisTitleMode.UseText
raxis.title.text = 'Radial Position (cm)'
raxis.title.show_on_all_radial_axes = True
raxis.title.color = Color.Blue
raxis.title.position = 80
plot.view.fit()
tp.export.save_png('axis_title_radial.png', 600, supersample=3)
.. figure:: /_static/images/axis_title_radial.png
:width: 300px
:figwidth: 300px
"""
@property
def show_on_all_radial_axes(self):
"""`bool`: Draw title along all radial axis lines.
Example usage::
>>> plot.axes.r_axis.line.show_perpendicular = True
>>> plot.axes.r_axis.title.show_on_all_radial_axes = True
"""
return self._get_style(bool, sv.SHOWONALLAXES)
@show_on_all_radial_axes.setter
def show_on_all_radial_axes(self, value):
self._set_style(bool(value), sv.SHOWONALLAXES)