summaryrefslogtreecommitdiff
path: root/src/cython
diff options
context:
space:
mode:
authorvrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2018-09-10 09:32:00 +0000
committervrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2018-09-10 09:32:00 +0000
commitbdbbbc71e7d82526b24f76cc3b9916ad53919d41 (patch)
treecf90a360d20a74478a0e543e4c7a18e8712d06bf /src/cython
parent44aaa06e1da4a2e4557886c9c7096edbe9d00f53 (diff)
Code review : More explicit message when import fails in plot persistence graphical tools
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/plot_persistence_density_vincent@3881 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 96f9e3da3bd68d6cba65242b9890c4beb463c863
Diffstat (limited to 'src/cython')
-rwxr-xr-xsrc/cython/cython/persistence_graphical_tools.py309
1 files changed, 161 insertions, 148 deletions
diff --git a/src/cython/cython/persistence_graphical_tools.py b/src/cython/cython/persistence_graphical_tools.py
index f5550e3a..e66643d2 100755
--- a/src/cython/cython/persistence_graphical_tools.py
+++ b/src/cython/cython/persistence_graphical_tools.py
@@ -55,39 +55,39 @@ palette = ['#ff0000', '#00ff00', '#0000ff', '#00ffff', '#ff00ff', '#ffff00',
'#000000', '#880000', '#008800', '#000088', '#888800', '#880088',
'#008888']
-try:
- import matplotlib.pyplot as plt
- import matplotlib.patches as mpatches
- import numpy as np
- import os
-
- def plot_persistence_barcode(persistence=[], persistence_file='', alpha=0.6,
- max_intervals=1000, max_barcodes=1000,
- inf_delta=0.1, legend=False):
- """This function plots the persistence bar code from persistence values list
- or from a :doc:`persistence file <fileformats>`.
-
- :param persistence: Persistence values list.
- :type persistence: list of tuples(dimension, tuple(birth, death)).
- :param persistence_file: A :doc:`persistence file <fileformats>` style name
- (reset persistence if both are set).
- :type persistence_file: string
- :param alpha: barcode transparency value (0.0 transparent through 1.0
- opaque - default is 0.6).
- :type alpha: float.
- :param max_intervals: maximal number of intervals to display.
- Selected points are those with the longest life time. Set it
- to 0 to see all. Default value is 1000.
- :type max_intervals: int.
- :param inf_delta: Infinity is placed at ((max_death - min_birth) x
- inf_delta) above the highest point. A reasonable value is between
- 0.05 and 0.5 - default is 0.1.
- :type inf_delta: float.
- :param legend: Display the dimension color legend (default is False).
- :type legend: boolean.
- :returns: A matplotlib object containing horizontal bar plot of persistence
- (launch `show()` method on it to display it).
- """
+def plot_persistence_barcode(persistence=[], persistence_file='', alpha=0.6,
+ max_intervals=1000, max_barcodes=1000,
+ inf_delta=0.1, legend=False):
+ """This function plots the persistence bar code from persistence values list
+ or from a :doc:`persistence file <fileformats>`.
+
+ :param persistence: Persistence values list.
+ :type persistence: list of tuples(dimension, tuple(birth, death)).
+ :param persistence_file: A :doc:`persistence file <fileformats>` style name
+ (reset persistence if both are set).
+ :type persistence_file: string
+ :param alpha: barcode transparency value (0.0 transparent through 1.0
+ opaque - default is 0.6).
+ :type alpha: float.
+ :param max_intervals: maximal number of intervals to display.
+ Selected points are those with the longest life time. Set it
+ to 0 to see all. Default value is 1000.
+ :type max_intervals: int.
+ :param inf_delta: Infinity is placed at ((max_death - min_birth) x
+ inf_delta) above the highest point. A reasonable value is between
+ 0.05 and 0.5 - default is 0.1.
+ :type inf_delta: float.
+ :param legend: Display the dimension color legend (default is False).
+ :type legend: boolean.
+ :returns: A matplotlib object containing horizontal bar plot of persistence
+ (launch `show()` method on it to display it).
+ """
+ try:
+ import matplotlib.pyplot as plt
+ import matplotlib.patches as mpatches
+ import numpy as np
+ import os
+
if persistence_file is not '':
if os.path.isfile(persistence_file):
# Reset persistence
@@ -143,34 +143,43 @@ try:
plt.axis([axis_start, infinity, 0, ind])
return plt
- def plot_persistence_diagram(persistence=[], persistence_file='', alpha=0.6,
- band=0., max_intervals=1000, max_plots=1000, inf_delta=0.1, legend=False):
- """This function plots the persistence diagram from persistence values
- list or from a :doc:`persistence file <fileformats>`.
-
- :param persistence: Persistence values list.
- :type persistence: list of tuples(dimension, tuple(birth, death)).
- :param persistence_file: A :doc:`persistence file <fileformats>` style name
- (reset persistence if both are set).
- :type persistence_file: string
- :param alpha: plot transparency value (0.0 transparent through 1.0
- opaque - default is 0.6).
- :type alpha: float.
- :param band: band (not displayed if :math:`\leq` 0. - default is 0.)
- :type band: float.
- :param max_intervals: maximal number of intervals to display.
- Selected points are those with the longest life time. Set it
- to 0 to see all. Default value is 1000.
- :type max_intervals: int.
- :param inf_delta: Infinity is placed at ((max_death - min_birth) x
- inf_delta) above the highest point. A reasonable value is between
- 0.05 and 0.5 - default is 0.1.
- :type inf_delta: float.
- :param legend: Display the dimension color legend (default is False).
- :type legend: boolean.
- :returns: A matplotlib object containing diagram plot of persistence
- (launch `show()` method on it to display it).
- """
+ except ImportError:
+ print("This function is not available, you may be missing numpy and/or matplotlib.")
+
+def plot_persistence_diagram(persistence=[], persistence_file='', alpha=0.6,
+ band=0., max_intervals=1000, max_plots=1000, inf_delta=0.1, legend=False):
+ """This function plots the persistence diagram from persistence values
+ list or from a :doc:`persistence file <fileformats>`.
+
+ :param persistence: Persistence values list.
+ :type persistence: list of tuples(dimension, tuple(birth, death)).
+ :param persistence_file: A :doc:`persistence file <fileformats>` style name
+ (reset persistence if both are set).
+ :type persistence_file: string
+ :param alpha: plot transparency value (0.0 transparent through 1.0
+ opaque - default is 0.6).
+ :type alpha: float.
+ :param band: band (not displayed if :math:`\leq` 0. - default is 0.)
+ :type band: float.
+ :param max_intervals: maximal number of intervals to display.
+ Selected points are those with the longest life time. Set it
+ to 0 to see all. Default value is 1000.
+ :type max_intervals: int.
+ :param inf_delta: Infinity is placed at ((max_death - min_birth) x
+ inf_delta) above the highest point. A reasonable value is between
+ 0.05 and 0.5 - default is 0.1.
+ :type inf_delta: float.
+ :param legend: Display the dimension color legend (default is False).
+ :type legend: boolean.
+ :returns: A matplotlib object containing diagram plot of persistence
+ (launch `show()` method on it to display it).
+ """
+ try:
+ import matplotlib.pyplot as plt
+ import matplotlib.patches as mpatches
+ import numpy as np
+ import os
+
if persistence_file is not '':
if os.path.isfile(persistence_file):
# Reset persistence
@@ -230,104 +239,108 @@ try:
plt.axis([axis_start, infinity, axis_start, infinity + delta])
return plt
+ except ImportError:
+ print("This function is not available, you may be missing numpy and/or matplotlib.")
+
+def plot_persistence_density(persistence=[], persistence_file='',
+ nbins=300, bw_method=None,
+ max_intervals=1000, dimension=None,
+ cmap=None, legend=False):
+ """This function plots the persistence density from persistence
+ values list or from a :doc:`persistence file <fileformats>`. Be
+ aware that this function does not distinguish the dimension, it is
+ up to you to select the required one.
+
+ :param persistence: Persistence values list.
+ :type persistence: list of tuples(dimension, tuple(birth, death)).
+ :param persistence_file: A :doc:`persistence file <fileformats>`
+ style name (reset persistence if both are set).
+ :type persistence_file: string
+ :param nbins: Evaluate a gaussian kde on a regular grid of nbins x
+ nbins over data extents (default is 300)
+ :type nbins: int.
+ :param bw_method: The method used to calculate the estimator
+ bandwidth. This can be 'scott', 'silverman', a scalar constant
+ or a callable. If a scalar, this will be used directly as
+ kde.factor. If a callable, it should take a gaussian_kde
+ instance as only parameter and return a scalar. If None
+ (default), 'scott' is used. See
+ `scipy.stats.gaussian_kde documentation
+ <http://scipy.github.io/devdocs/generated/scipy.stats.gaussian_kde.html>`_
+ for more details.
+ :type bw_method: str, scalar or callable, optional.
+ :param max_intervals: maximal number of intervals to display.
+ Selected points are those with the longest life time. Set it
+ to 0 to see all. Default value is 1000.
+ :type max_intervals: int.
+ :param dimension: the dimension to be selected in the intervals
+ (default is None to mix all dimensions).
+ :type dimension: int.
+ :param cmap: A matplotlib colormap (default is
+ matplotlib.pyplot.cm.hot_r).
+ :type cmap: cf. matplotlib colormap.
+ :param legend: Display the color bar values (default is False).
+ :type legend: boolean.
+ :returns: A matplotlib object containing diagram plot of persistence
+ (launch `show()` method on it to display it).
+ """
try:
+ import matplotlib.pyplot as plt
+ import numpy as np
from scipy.stats import kde
+ import os
import math
- def plot_persistence_density(persistence=[], persistence_file='',
- nbins=300, bw_method=None,
- max_intervals=1000, dimension=None,
- cmap=plt.cm.hot_r, legend=False):
- """This function plots the persistence density from persistence
- values list or from a :doc:`persistence file <fileformats>`. Be
- aware that this function does not distinguish the dimension, it is
- up to you to select the required one.
-
- :param persistence: Persistence values list.
- :type persistence: list of tuples(dimension, tuple(birth, death)).
- :param persistence_file: A :doc:`persistence file <fileformats>`
- style name (reset persistence if both are set).
- :type persistence_file: string
- :param nbins: Evaluate a gaussian kde on a regular grid of nbins x
- nbins over data extents (default is 300)
- :type nbins: int.
- :param bw_method: The method used to calculate the estimator
- bandwidth. This can be 'scott', 'silverman', a scalar constant
- or a callable. If a scalar, this will be used directly as
- kde.factor. If a callable, it should take a gaussian_kde
- instance as only parameter and return a scalar. If None
- (default), 'scott' is used. See
- `scipy.stats.gaussian_kde documentation
- <http://scipy.github.io/devdocs/generated/scipy.stats.gaussian_kde.html>`_
- for more details.
- :type bw_method: str, scalar or callable, optional.
- :param max_intervals: maximal number of intervals to display.
- Selected points are those with the longest life time. Set it
- to 0 to see all. Default value is 1000.
- :type max_intervals: int.
- :param dimension: the dimension to be selected in the intervals
- (default is None to mix all dimensions).
- :type dimension: int.
- :param cmap: A matplotlib colormap (default is
- matplotlib.pyplot.cm.hot_r).
- :type cmap: cf. matplotlib colormap.
- :param legend: Display the color bar values (default is False).
- :type legend: boolean.
- :returns: A matplotlib object containing diagram plot of persistence
- (launch `show()` method on it to display it).
- """
- if persistence_file is not '':
- if os.path.isfile(persistence_file):
- # Reset persistence
- persistence = []
- diag = read_persistence_intervals_grouped_by_dimension(persistence_file=persistence_file)
- for key in diag.keys():
- for persistence_interval in diag[key]:
- persistence.append((key, persistence_interval))
- else:
- print("file " + persistence_file + " not found.")
- return None
-
- persistence_dim = []
- if dimension is not None:
- persistence_dim = [(dim_interval) for dim_interval in persistence if (dim_interval[0] == dimension)]
+ if persistence_file is not '':
+ if os.path.isfile(persistence_file):
+ # Reset persistence
+ persistence = []
+ diag = read_persistence_intervals_grouped_by_dimension(persistence_file=persistence_file)
+ for key in diag.keys():
+ for persistence_interval in diag[key]:
+ persistence.append((key, persistence_interval))
else:
- persistence_dim = persistence
+ print("file " + persistence_file + " not found.")
+ return None
- if max_intervals > 0 and max_intervals < len(persistence_dim):
- # Sort by life time, then takes only the max_intervals elements
- persistence_dim = sorted(persistence_dim,
- key=lambda life_time: life_time[1][1]-life_time[1][0],
- reverse=True)[:max_intervals]
+ persistence_dim = []
+ if dimension is not None:
+ persistence_dim = [(dim_interval) for dim_interval in persistence if (dim_interval[0] == dimension)]
+ else:
+ persistence_dim = persistence
- # Set as numpy array birth and death (remove undefined values - inf and NaN)
- birth = np.asarray([(interval[1][0]) for interval in persistence_dim if (math.isfinite(interval[1][1]) and math.isfinite(interval[1][0]))])
- death = np.asarray([(interval[1][1]) for interval in persistence_dim if (math.isfinite(interval[1][1]) and math.isfinite(interval[1][0]))])
+ if max_intervals > 0 and max_intervals < len(persistence_dim):
+ # Sort by life time, then takes only the max_intervals elements
+ persistence_dim = sorted(persistence_dim,
+ key=lambda life_time: life_time[1][1]-life_time[1][0],
+ reverse=True)[:max_intervals]
- # line display of equation : birth = death
- x = np.linspace(death.min(), birth.max(), 1000)
- plt.plot(x, x, color='k', linewidth=1.0)
+ # Set as numpy array birth and death (remove undefined values - inf and NaN)
+ birth = np.asarray([(interval[1][0]) for interval in persistence_dim if (math.isfinite(interval[1][1]) and math.isfinite(interval[1][0]))])
+ death = np.asarray([(interval[1][1]) for interval in persistence_dim if (math.isfinite(interval[1][1]) and math.isfinite(interval[1][0]))])
- # Evaluate a gaussian kde on a regular grid of nbins x nbins over data extents
- k = kde.gaussian_kde([birth,death], bw_method=bw_method)
- xi, yi = np.mgrid[birth.min():birth.max():nbins*1j, death.min():death.max():nbins*1j]
- zi = k(np.vstack([xi.flatten(), yi.flatten()]))
+ # line display of equation : birth = death
+ x = np.linspace(death.min(), birth.max(), 1000)
+ plt.plot(x, x, color='k', linewidth=1.0)
- # Make the plot
- plt.pcolormesh(xi, yi, zi.reshape(xi.shape), cmap=cmap)
+ # Evaluate a gaussian kde on a regular grid of nbins x nbins over data extents
+ k = kde.gaussian_kde([birth,death], bw_method=bw_method)
+ xi, yi = np.mgrid[birth.min():birth.max():nbins*1j, death.min():death.max():nbins*1j]
+ zi = k(np.vstack([xi.flatten(), yi.flatten()]))
- if legend:
- plt.colorbar()
+ # default cmap value cannot be done at argument definition level as matplotlib is not yet defined.
+ if cmap is None:
+ cmap = plt.cm.hot_r
+ # Make the plot
+ plt.pcolormesh(xi, yi, zi.reshape(xi.shape), cmap=cmap)
- plt.title('Persistence density')
- plt.xlabel('Birth')
- plt.ylabel('Death')
- return plt
+ if legend:
+ plt.colorbar()
- except ImportError:
- # Continue in case of import error, functions won't be available
- pass
+ plt.title('Persistence density')
+ plt.xlabel('Birth')
+ plt.ylabel('Death')
+ return plt
-except ImportError:
- # Continue in case of import error, functions won't be available
- pass
+ except ImportError:
+ print("This function is not available, you may be missing numpy, matplotlib and/or scipy.")