Commit 779c6d08 authored by Hoek, Steven's avatar Hoek, Steven
Browse files

Function added for generating color map with random colors.

parent becdd02f
...@@ -5,6 +5,8 @@ import re ...@@ -5,6 +5,8 @@ import re
# E.g. with this: https://github.com/karimbahgat/Shapy # E.g. with this: https://github.com/karimbahgat/Shapy
from shapely.geometry import Polygon from shapely.geometry import Polygon
from descartes import PolygonPatch from descartes import PolygonPatch
from matplotlib.colors import LinearSegmentedColormap
import colorsys
import numpy as np import numpy as np
class IntervalLegend(): class IntervalLegend():
...@@ -84,4 +86,55 @@ def get_colored_patch(listwithcoords, fillcolor, edgecolor): ...@@ -84,4 +86,55 @@ def get_colored_patch(listwithcoords, fillcolor, edgecolor):
polygon = Polygon(np.array(listwithcoords)) polygon = Polygon(np.array(listwithcoords))
result = PolygonPatch(polygon, fc=fillcolor, ec=edgecolor, alpha=1.0) result = PolygonPatch(polygon, fc=fillcolor, ec=edgecolor, alpha=1.0)
return result return result
\ No newline at end of file def rand_cmap(nlabels, type='bright', first_color_black=True, last_color_black=False, verbose=True):
"""
Creates a random colormap to be used together with matplotlib. Useful for segmentation tasks
:param nlabels: Number of labels (size of colormap)
:param type: 'bright' for strong colors, 'soft' for pastel colors
:param first_color_black: Option to use first color as black, True or False
:param last_color_black: Option to use last color as black, True or False
:param verbose: Prints the number of labels and shows the colormap. True or False
:return: colormap for matplotlib
"""
if type not in ('bright', 'soft'):
print ('Please choose "bright" or "soft" for type')
return
if verbose:
print('Number of labels: ' + str(nlabels))
# Generate color map for bright colors, based on hsv
if type == 'bright':
randHSVcolors = [(np.random.uniform(low=0.0, high=1),
np.random.uniform(low=0.2, high=1),
np.random.uniform(low=0.9, high=1)) for i in range(nlabels)]
# Convert HSV list to RGB
randRGBcolors = []
for HSVcolor in randHSVcolors:
randRGBcolors.append(colorsys.hsv_to_rgb(HSVcolor[0], HSVcolor[1], HSVcolor[2]))
if first_color_black:
randRGBcolors[0] = [0, 0, 0]
if last_color_black:
randRGBcolors[-1] = [0, 0, 0]
random_colormap = LinearSegmentedColormap.from_list('new_map', randRGBcolors, N=nlabels)
# Generate soft pastel colors, by limiting the RGB spectrum
if type == 'soft':
low = 0.6
high = 0.95
randRGBcolors = [(np.random.uniform(low=low, high=high),
np.random.uniform(low=low, high=high),
np.random.uniform(low=low, high=high)) for i in range(nlabels)]
if first_color_black:
randRGBcolors[0] = [0, 0, 0]
if last_color_black:
randRGBcolors[-1] = [0, 0, 0]
random_colormap = LinearSegmentedColormap.from_list('new_map', randRGBcolors, N=nlabels)
# Display colorbar
if verbose:
from matplotlib import colors, colorbar
from matplotlib import pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(15, 0.5))
bounds = np.linspace(0, nlabels, nlabels + 1)
norm = colors.BoundaryNorm(bounds, nlabels)
cb = colorbar.ColorbarBase(ax, cmap=random_colormap, norm=norm, spacing='proportional', ticks=None,
boundaries=bounds, format='%1i', orientation=u'horizontal')
return random_colormap
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment