Exemple #1
0
    def draw_isolines(self, iso_type, iso_range, num=10, rounding=False,
                      units='kSI', line_opts=None, axis_limits=None):
        """ Create isolines

        Parameters
        ----------
        iso_type : str
            Type of the isolines
        iso_range : list
            Range between isolines will be created [min, max]
        num : int
            Number of the isolines within range, Optional
        units : str
            Unit system of the input data ('kSI' or 'SI'), Optional
        line_opts : dict
            Line options (please see :func:`matplotlib.pyplot.plot`), Optional
        axis_limits : list
            Limits for drawing isolines [[xmin, xmax], [ymin, ymax]], Optional

        """

        # convert input data to SI units for internal use
        iso_range = CP.toSI(iso_type, iso_range, units)
        if axis_limits is not None:
            axis_limits = [CP.toSI(self.graph_type[1].upper(), axis_limits[0], units),
                           CP.toSI(self.graph_type[0].upper(), axis_limits[1], units),
                          ]

        iso_lines = IsoLines(self.fluid_ref,
                             self.graph_type,
                             iso_type,
                             axis=self.axis)
        iso_lines.draw_isolines(iso_range, num, rounding, line_opts, axis_limits)
Exemple #2
0
    def draw_process(self, states, line_opts={'color' : 'r', 'lw' : 1.5}):
        """ Draw process or cycle from list of State objects

        Parameters
        ----------
        states : list
            List of CoolProp.State.State objects
        line_opts : dict
            Line options (please see :func:`matplotlib.pyplot.plot`), Optional

        """

        # plot above other lines
        line_opts['zorder'] = 10

        for i, state in enumerate(states):
            if state.Fluid != self.fluid_ref:
                raise ValueError('Fluid [{0}] from State object does not match PropsPlot fluid [{1}].'.format(state.Fluid, self.fluid_ref))

            if i == 0: continue

            S2 = states[i]
            S1 = states[i-1]
            iso = False

            y_name, x_name = self.graph_type.lower().replace('t', 'T')

            x1 = getattr(S1, x_name)
            x2 = getattr(S2, x_name)
            y1 = getattr(S1, y_name)
            y2 = getattr(S2, y_name)

            # search for equal properties between states
            for iso_type in ['p', 'T', 's', 'h', 'rho']:
                if getattr(S1, iso_type) == getattr(S2, iso_type):
                    axis_limits = [[x1, x2], [y1, y2]]
                    self.draw_isolines(iso_type.upper(), [getattr(S1, iso_type)],
                                       num=1, units='kSI', line_opts=line_opts,
                                       axis_limits=axis_limits)
                    iso = True
                    break

            # connect states with straight line
            if not iso:
                # convert values to SI for plotting
                x_val = [CP.toSI(x_name.upper(), x1, 'kSI'),
                         CP.toSI(x_name.upper(), x2, 'kSI')]
                y_val = [CP.toSI(y_name.upper(), y1, 'kSI'),
                         CP.toSI(y_name.upper(), y2, 'kSI')]
                self.axis.plot(x_val, y_val, **line_opts)
Exemple #3
0
 def draw_isolines(self, iso_type, iso_range, num=10, rounding=False, units='kSI'):
     # convert range to SI units for internal use
     iso_range = CP.toSI(iso_type, iso_range, units)
     iso_lines = IsoLines(self.fluid_ref,
                          self.graph_type,
                          iso_type,
                          axis=self.axis)
     iso_lines.draw_isolines(iso_range, num, rounding)
Exemple #4
0
def drawIsoLines(Ref, plot, which, iValues=[], num=0, show=False, axis=None, units='kSI', line_opts=None):
    """
    Draw lines with constant values of type 'which' in terms of x and y as
    defined by 'plot'. 'iMin' and 'iMax' are minimum and maximum value
    between which 'num' get drawn.

    :Note:
        :func:`CoolProps.Plots.drawIsoLines` will be depreciated in future
        releases and replaced with :func:`CoolProps.Plots.IsoLines`

    Parameters
    -----------
    Ref : str
        The given reference fluid
    plot : str
        The plot type used
    which : str
        The iso line type
    iValues : list
        The list of constant iso line values
    num : int, Optional
        The number of iso lines
        (Default: 0 - Use iValues list only)
    show : bool, Optional
        Show the current plot
        (Default: False)
    axis : :func:`matplotlib.pyplot.gca()`, Optional
        The current axis system to be plotted to.
        (Default: create a new axis system)
    units : str
        Unit system of the input data ('kSI' or 'SI'), Optional
    line_opts : dict
        Line options (please see :func:`matplotlib.pyplot.plot`), Optional

    Examples
    --------
    >>> from matplotlib import pyplot
    >>> from CoolProp.Plots import Ts, drawIsoLines
    >>>
    >>> Ref = 'n-Pentane'
    >>> ax = Ts(Ref)
    >>> ax.set_xlim([-0.5, 1.5])
    >>> ax.set_ylim([300, 530])
    >>> quality = drawIsoLines(Ref, 'Ts', 'Q', [0.3, 0.5, 0.7, 0.8], axis=ax)
    >>> isobars = drawIsoLines(Ref, 'Ts', 'P', [100, 2000], num=5, axis=ax)
    >>> isochores = drawIsoLines(Ref, 'Ts', 'D', [2, 600], num=7, axis=ax)
    >>> pyplot.show()
    """

    # convert input data to SI units for internal use
    iValues = CP.toSI(which, iValues, units)

    isolines = IsoLines(Ref, plot, which, axis=axis)
    lines = isolines.draw_isolines(iValues, num=num, line_opts=line_opts)
    if show:
        isolines.show()
    return lines
Exemple #5
0
 def set_axis_limits(self, limits, units='kSI'):
     # convert limits to SI units for internal use
     limits[0:2] = CP.toSI(self.graph_type[1], limits[0:2], units)
     limits[2:] = CP.toSI(self.graph_type[0], limits[2:], units)
     self.axis.set_xlim([limits[0], limits[1]])
     self.axis.set_ylim([limits[2], limits[3]])