Source code for tecplot.legend.rgb_coloring_legend

from builtins import str, super

from ..constant import *
from ..tecutil import sv
from .. import tecutil
from . import legend


[docs] class RGBColoringLegend(legend.Legend): """Legend for RGB coloring (multivariate contour) plots. .. note:: The RGB coloring legend will only show when an active fieldmap's contour is being flooded by RGB. .. code-block:: python :emphasize-lines: 46-48 import os import numpy as np import tecplot as tp from tecplot.constant import * def normalize_variable(dataset, varname, nsigma=2): ''' Normalize a variable such that the specified number of standard deviations are within the range [0.5, 1] and the mean is transformed to 0.5. The new variable will append " normalized" to the original variable's name. ''' with tp.session.suspend(): newvarname = varname + ' normalized' dataset.add_variable(newvarname) data = np.concatenate([z.values(varname).as_numpy_array() for z in dataset.zones()]) vmin = data.mean() - nsigma * data.std() vmax = data.mean() + nsigma * data.std() for z in dataset.zones(): arr = z.values(varname).as_numpy_array() z.values(newvarname)[:] = (arr - vmin) / (vmax - vmin) examples_dir = tp.session.tecplot_examples_directory() infile = os.path.join(examples_dir, 'SimpleData', 'HeatExchanger.plt') dataset = tp.data.load_tecplot(infile) frame = tp.active_frame() plot = frame.plot(PlotType.Cartesian2D) plot.show_contour = True # Variables must be normalized relative to each other # to make effective use of RGB coloring. normalize_variable(dataset, 'T(K)') normalize_variable(dataset, 'P(N)') plot.rgb_coloring.mode = RGBMode.SpecifyGB # all three channel variables must be set even if # we are only contouring on two of them. plot.rgb_coloring.red_variable = dataset.variable(0) plot.rgb_coloring.green_variable = dataset.variable('P(N) normalized') plot.rgb_coloring.blue_variable = dataset.variable('T(K) normalized') plot.rgb_coloring.legend.show = True plot.rgb_coloring.legend.green_label = 'Pressure' plot.rgb_coloring.legend.blue_label = 'Temperature' plot.fieldmaps().contour.flood_contour_group = plot.rgb_coloring tp.export.save_png('rgb_coloring_legend.png') .. figure:: /_static/images/rgb_coloring_legend.png :width: 300px :figwidth: 300px """ def __init__(self, rgb_coloring): self.rgb_coloring = rgb_coloring super().__init__(rgb_coloring._sv, sv.LEGEND, **rgb_coloring._kw) @tecutil.inherited_property(legend.CategoryLegend) def box(self): """`text.TextBox`: Legend box attributes. Example usage:: >>> from tecplot.constant import Color >>> plot.rgb_coloring.legend.box.fill_color = Color.Yellow """ @tecutil.inherited_property(legend.CategoryLegend) def show(self): """`bool`: Display the RGB coloring legend. Example usage:: >>> plot.rgb_coloring.legend.show = True """ @tecutil.inherited_property(legend.CategoryLegend) def anchor_alignment(self): """`AnchorAlignment`: Anchor location of the legend. Example usage:: >>> from tecplot.constant import AnchorAlignment >>> legend = plot.rgb_coloring.legend >>> legend.anchor_alignment = AnchorAlignment.BottomCenter """ @tecutil.inherited_property(legend.CategoryLegend) def text_color(self): """`Color`: Color of legend text. Example usage:: >>> from tecplot.constant import Color >>> legend = plot.rgb_coloring.legend >>> legend.text_color = Color.Blue """ @tecutil.inherited_property(legend.CategoryLegend) def position(self): """`tuple`: Position as a percentage of frame width/height. The legend is automatically placed for you. You may specify the :math:`(x,y)` position of the legend by setting this value, where :math:`x` is the percentage of frame width, and :math:`y` is a percentage of frame height. Example usage:: >>> plot.rgb_coloring.legend.position = (20, 80) """ @tecutil.inherited_property(legend.CategoryLegend) def font(self): """`text.Font`: Legend font attributes. .. note:: The font `size_units <tecplot.text.Font.size_units>` property may only be set to `Units.Frame` or `Units.Point`. Example usage:: >>> plot.rgb_coloring.legend.font.italic = True """ @property def show_labels(self): """`bool`: Show the RGB channel labels. Example usage:: >>> legend = plot.rgb_coloring.legend >>> legend.show_labels = True >>> legend.red_label = 'Variable A' >>> legend.green_label = 'Variable B' >>> legend.blue_label = 'Variable C' """ return self._get_style(bool, sv.SHOWLABELS) @show_labels.setter def show_labels(self, value): self._set_style(bool(value), sv.SHOWLABELS) @property def height(self): """`float`: Size of RGB coloring legend Example usage:: >>> plot.rgb_coloring.legend.height = 20 """ return self._get_style(float, sv.HEIGHT) @height.setter def height(self, value): self._set_style(float(value), sv.HEIGHT) @property def orientation(self): """`RGBLegendOrientation`: Placement of the RGB channels on the legend. The first color is on the bottom left, the second is on the bottom right, and the third is on top. Example usage:: >>> from tecplot.constant import RGBLegendOrientation >>> legend = plot.rgb_coloring.legend >>> legend.orientation = RGBLegendOrientation.RBG """ return self._get_style(RGBLegendOrientation, sv.RGBLEGENDORIENTATION) @orientation.setter def orientation(self, value): self._set_style(RGBLegendOrientation(value), sv.RGBLEGENDORIENTATION) @property def use_variable_for_red_label(self): """`bool`: Use the `Variable` name for the red channel. Example usage:: >>> plot.rgb_coloring.legend.use_variable_for_red_label = False >>> plot.rgb_coloring.legend.red_label = 'gas' """ return self._get_style(bool, sv.USEREDVARNAME) @use_variable_for_red_label.setter def use_variable_for_red_label(self, value): self._set_style(bool(value), sv.USEREDVARNAME) @property def red_label(self): """`str`: Label to use for the red channel. This can be set to a string (which may be empty) but the `use_variable_for_red_label` property must be set to `False` for this label to be shown:: >>> plot.rgb_coloring.legend.use_variable_for_red_label = False >>> plot.rgb_coloring.legend.red_label = 'gas' """ return self._get_style(str, sv.REDCHANNELLABEL) @red_label.setter def red_label(self, value): self._set_style(str(value), sv.REDCHANNELLABEL) @property def use_variable_for_green_label(self): """`bool`: Use the `Variable` name for the green channel. Example usage:: >>> plot.rgb_coloring.legend.use_variable_for_green_label = False >>> plot.rgb_coloring.legend.green_label = 'gas' """ return self._get_style(bool, sv.USEGREENVARNAME) @use_variable_for_green_label.setter def use_variable_for_green_label(self, value): self._set_style(bool(value), sv.USEGREENVARNAME) @property def green_label(self): """`str`: Label to use for the green channel. This can be set to a string (which may be empty) but the `use_variable_for_green_label` property must be set to `False` for this label to be shown:: >>> plot.rgb_coloring.legend.use_variable_for_green_label = False >>> plot.rgb_coloring.legend.green_label = 'oil' """ return self._get_style(str, sv.GREENCHANNELLABEL) @green_label.setter def green_label(self, value): self._set_style(str(value), sv.GREENCHANNELLABEL) @property def use_variable_for_blue_label(self): """`bool`: Use the `Variable` name for the blue channel. Example usage:: >>> plot.rgb_coloring.legend.use_variable_for_blue_label = False >>> plot.rgb_coloring.legend.blue_label = 'gas' """ return self._get_style(bool, sv.USEBLUEVARNAME) @use_variable_for_blue_label.setter def use_variable_for_blue_label(self, value): self._set_style(bool(value), sv.USEBLUEVARNAME) @property def blue_label(self): """`str`: Label to use for the blue channel. This can be set to a string (which may be empty) but the `use_variable_for_blue_label` property must be set to `False` for this label to be shown:: >>> plot.rgb_coloring.legend.use_variable_for_blue_label = False >>> plot.rgb_coloring.legend.blue_label = 'water' """ return self._get_style(str, sv.BLUECHANNELLABEL) @blue_label.setter def blue_label(self, value): self._set_style(str(value), sv.BLUECHANNELLABEL)