We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
ColorMapping - color values out of high/low
``` python
data = [-1, 0, np.NaN, 1, 2]
cmap = LinearColorMapper(palette=["red", "green"], low=0, high=1, nan_color=‘gray’, high_color=‘orange’, low_color=‘pink’)
# expect: [‘pink’, ‘red’, ‘gray’, ‘green’, ‘orange’]
```

LogColorMapper should also receive this treatment.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `bokeh/models/mappers.py`
Content:
```
1 """ Models for mapping values from one range or space to another.
2 
3 """
4 from __future__ import absolute_import
5 import warnings
6 
7 from ..model import Model
8 from ..core.properties import abstract
9 from ..core.properties import Color, Enum, Seq, Either, String, Int, Float, Date, Datetime
10 from ..core.enums import Palette
11 from .. import palettes
12 
13 
14 @abstract
15 class ColorMapper(Model):
16     """ Base class for color mapper types. ``ColorMapper`` is not
17     generally useful to instantiate on its own.
18 
19     """
20 
21     palette = Seq(Color, help="""
22     A sequence of colors to use as the target palette for mapping.
23 
24     This property can also be set as a ``String``, to the name of
25     any of the palettes shown in :ref:`bokeh.palettes`.
26     """).accepts(Enum(Palette), lambda pal: getattr(palettes, pal))
27 
28     nan_color = Color(default="gray", help="""
29     Color to be used if data is NaN. Default: 'gray'
30     """)
31 
32     def __init__(self, palette=None, **kwargs):
33         if palette is not None:
34             kwargs['palette'] = palette
35         super(ColorMapper, self).__init__(**kwargs)
36 
37 
38 class CategoricalColorMapper(ColorMapper):
39     """ Map categories to colors. Values that are passed to
40     this mapper that aren't in factors will be assigned the nan_color.
41 
42     """
43 
44     factors = Either(Seq(String), Seq(Int), Seq(Float), Seq(Datetime), Seq(Date), help="""
45     A sequence of factors / categories that map to the color palette.
46     """)
47 
48 
49     def __init__(self, **kwargs):
50         super(ColorMapper, self).__init__(**kwargs)
51         palette = self.palette
52         factors = self.factors
53         if palette and factors:
54             if len(palette) < len(factors):
55                 extra_factors = factors[len(palette):]
56                 warnings.warn("""Palette length does not match number of
57 factors. %s will be assigned to `nan_color` %s""" % (extra_factors, self.nan_color))
58 
59 
60 @abstract
61 class ContinuousColorMapper(ColorMapper):
62     """ Base class for cotinuous color mapper types. ``ContinuousColorMapper`` is not
63     generally useful to instantiate on its own.
64 
65     """
66 
67     low = Float(help="""
68     The minimum value of the range to map into the palette. Values below
69     this are clamped to ``low``.
70     """)
71 
72     high = Float(help="""
73     The maximum value of the range to map into the palette. Values above
74     this are clamped to ``high``.
75     """)
76 
77 
78 class LinearColorMapper(ContinuousColorMapper):
79     """ Map numbers in a range [*low*, *high*] linearly into a
80     sequence of colors (a palette).
81 
82     For example, if the range is [0, 99] and the palette is
83     ``['red', 'green', 'blue']``, the values would be mapped as
84     follows::
85 
86              x < 0  : 'red'     # values < low are clamped
87         0 >= x < 33 : 'red'
88        33 >= x < 66 : 'green'
89        66 >= x < 99 : 'blue'
90        99 >= x      : 'blue'    # values > high are clamped
91 
92     """
93 
94 
95 class LogColorMapper(ContinuousColorMapper):
96     """ Map numbers in a range [*low*, *high*] into a
97     sequence of colors (a palette) on a natural logarithm scale.
98 
99     For example, if the range is [0, 25] and the palette is
100     ``['red', 'green', 'blue']``, the values would be mapped as
101     follows::
102 
103                 x < 0     : 'red'     # values < low are clamped
104        0     >= x < 2.72  : 'red'     # math.e ** 1
105        2.72  >= x < 7.39  : 'green'   # math.e ** 2
106        7.39  >= x < 20.09 : 'blue'    # math.e ** 3
107        20.09 >= x         : 'blue'    # values > high are clamped
108 
109     .. warning::
110         The LogColorMapper only works for images with scalar values that are
111         non-negative.
112 
113     """
114
```

Path: `examples/plotting/file/color_data_map.py`
Content:
```
1 import numpy as np
2 
3 from bokeh.io import show
4 from bokeh.layouts import gridplot
5 from bokeh.models import (
6     ColumnDataSource,
7     ColorBar,
8     LinearColorMapper,
9     LogColorMapper,
10 )
11 from bokeh.palettes import Viridis3, Viridis256
12 from bokeh.plotting import figure
13 
14 x = np.random.random(2500) * 100
15 y = np.random.normal(size=2500) * 2 + 5
16 source = ColumnDataSource(dict(x=x, y=y))
17 opts = dict(x='x', line_color=None, source=source)
18 
19 
20 def make_plot(mapper, title):
21     p = figure(toolbar_location=None, tools='', title=title)
22     color_bar = ColorBar(color_mapper=mapper, location=(0, 0))
23     p.circle(
24         x='x', y='y',
25         fill_color={'field': 'x', 'transform': mapper}, line_color=None,
26         source=source
27     )
28     p.add_layout(color_bar, 'right')
29     return p
30 
31 p1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear')
32 p2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log')
33 p3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear')
34 p4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log')
35 
36 show(gridplot([p1, p2, p3, p4], ncols=2, plot_width=400, plot_height=300, toolbar_location=None))
37
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/bokeh/models/mappers.py b/bokeh/models/mappers.py
--- a/bokeh/models/mappers.py
+++ b/bokeh/models/mappers.py
@@ -74,6 +74,15 @@
     this are clamped to ``high``.
     """)
 
+    low_color = Color(default=None, help="""
+    Color to be used if data is lower than ``low`` value. If None,
+    values lower than ``low`` are mapped to the first color in the palette.
+    """)
+
+    high_color = Color(default=None, help="""
+    Color to be used if data is lower than ``high`` value. If None,
+    values lower than ``high`` are mapped to the last color in the palette.
+    """)
 
 class LinearColorMapper(ContinuousColorMapper):
     """ Map numbers in a range [*low*, *high*] linearly into a
@@ -92,6 +101,7 @@
     """
 
 
+
 class LogColorMapper(ContinuousColorMapper):
     """ Map numbers in a range [*low*, *high*] into a
     sequence of colors (a palette) on a natural logarithm scale.
diff --git a/examples/plotting/file/color_data_map.py b/examples/plotting/file/color_data_map.py
--- a/examples/plotting/file/color_data_map.py
+++ b/examples/plotting/file/color_data_map.py
@@ -11,13 +11,15 @@
 from bokeh.palettes import Viridis3, Viridis256
 from bokeh.plotting import figure
 
-x = np.random.random(2500) * 100
+x = np.random.random(2500) * 140 - 20
 y = np.random.normal(size=2500) * 2 + 5
 source = ColumnDataSource(dict(x=x, y=y))
 opts = dict(x='x', line_color=None, source=source)
 
 
 def make_plot(mapper, title):
+    mapper.low_color = 'blue'
+    mapper.high_color = 'red'
     p = figure(toolbar_location=None, tools='', title=title)
     color_bar = ColorBar(color_mapper=mapper, location=(0, 0))
     p.circle(
@@ -28,9 +30,9 @@
     p.add_layout(color_bar, 'right')
     return p
 
-p1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear')
-p2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log')
-p3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear')
-p4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log')
+p1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear, low/high = blue/red')
+p2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log, low/high = blue/red')
+p3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear, low/high = blue/red')
+p4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log, low/high =, blue/red')
 
 show(gridplot([p1, p2, p3, p4], ncols=2, plot_width=400, plot_height=300, toolbar_location=None))

{"golden_diff": "diff --git a/bokeh/models/mappers.py b/bokeh/models/mappers.py\n--- a/bokeh/models/mappers.py\n+++ b/bokeh/models/mappers.py\n@@ -74,6 +74,15 @@\n     this are clamped to ``high``.\n     \"\"\")\n \n+    low_color = Color(default=None, help=\"\"\"\n+    Color to be used if data is lower than ``low`` value. If None,\n+    values lower than ``low`` are mapped to the first color in the palette.\n+    \"\"\")\n+\n+    high_color = Color(default=None, help=\"\"\"\n+    Color to be used if data is lower than ``high`` value. If None,\n+    values lower than ``high`` are mapped to the last color in the palette.\n+    \"\"\")\n \n class LinearColorMapper(ContinuousColorMapper):\n     \"\"\" Map numbers in a range [*low*, *high*] linearly into a\n@@ -92,6 +101,7 @@\n     \"\"\"\n \n \n+\n class LogColorMapper(ContinuousColorMapper):\n     \"\"\" Map numbers in a range [*low*, *high*] into a\n     sequence of colors (a palette) on a natural logarithm scale.\ndiff --git a/examples/plotting/file/color_data_map.py b/examples/plotting/file/color_data_map.py\n--- a/examples/plotting/file/color_data_map.py\n+++ b/examples/plotting/file/color_data_map.py\n@@ -11,13 +11,15 @@\n from bokeh.palettes import Viridis3, Viridis256\n from bokeh.plotting import figure\n \n-x = np.random.random(2500) * 100\n+x = np.random.random(2500) * 140 - 20\n y = np.random.normal(size=2500) * 2 + 5\n source = ColumnDataSource(dict(x=x, y=y))\n opts = dict(x='x', line_color=None, source=source)\n \n \n def make_plot(mapper, title):\n+    mapper.low_color = 'blue'\n+    mapper.high_color = 'red'\n     p = figure(toolbar_location=None, tools='', title=title)\n     color_bar = ColorBar(color_mapper=mapper, location=(0, 0))\n     p.circle(\n@@ -28,9 +30,9 @@\n     p.add_layout(color_bar, 'right')\n     return p\n \n-p1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear')\n-p2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log')\n-p3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear')\n-p4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log')\n+p1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear, low/high = blue/red')\n+p2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log, low/high = blue/red')\n+p3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear, low/high = blue/red')\n+p4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log, low/high =, blue/red')\n \n show(gridplot([p1, p2, p3, p4], ncols=2, plot_width=400, plot_height=300, toolbar_location=None))\n", "issue": "ColorMapping - color values out of high/low\n``` python\ndata = [-1, 0, np.NaN, 1, 2]\ncmap = LinearColorMapper(palette=[\"red\", \"green\"], low=0, high=1, nan_color=\u2018gray\u2019, high_color=\u2018orange\u2019, low_color=\u2018pink\u2019)\n# expect: [\u2018pink\u2019, \u2018red\u2019, \u2018gray\u2019, \u2018green\u2019, \u2018orange\u2019]\n```\n\nLogColorMapper should also receive this treatment.\n\n", "before_files": [{"content": "\"\"\" Models for mapping values from one range or space to another.\n\n\"\"\"\nfrom __future__ import absolute_import\nimport warnings\n\nfrom ..model import Model\nfrom ..core.properties import abstract\nfrom ..core.properties import Color, Enum, Seq, Either, String, Int, Float, Date, Datetime\nfrom ..core.enums import Palette\nfrom .. import palettes\n\n\n@abstract\nclass ColorMapper(Model):\n    \"\"\" Base class for color mapper types. ``ColorMapper`` is not\n    generally useful to instantiate on its own.\n\n    \"\"\"\n\n    palette = Seq(Color, help=\"\"\"\n    A sequence of colors to use as the target palette for mapping.\n\n    This property can also be set as a ``String``, to the name of\n    any of the palettes shown in :ref:`bokeh.palettes`.\n    \"\"\").accepts(Enum(Palette), lambda pal: getattr(palettes, pal))\n\n    nan_color = Color(default=\"gray\", help=\"\"\"\n    Color to be used if data is NaN. Default: 'gray'\n    \"\"\")\n\n    def __init__(self, palette=None, **kwargs):\n        if palette is not None:\n            kwargs['palette'] = palette\n        super(ColorMapper, self).__init__(**kwargs)\n\n\nclass CategoricalColorMapper(ColorMapper):\n    \"\"\" Map categories to colors. Values that are passed to\n    this mapper that aren't in factors will be assigned the nan_color.\n\n    \"\"\"\n\n    factors = Either(Seq(String), Seq(Int), Seq(Float), Seq(Datetime), Seq(Date), help=\"\"\"\n    A sequence of factors / categories that map to the color palette.\n    \"\"\")\n\n\n    def __init__(self, **kwargs):\n        super(ColorMapper, self).__init__(**kwargs)\n        palette = self.palette\n        factors = self.factors\n        if palette and factors:\n            if len(palette) < len(factors):\n                extra_factors = factors[len(palette):]\n                warnings.warn(\"\"\"Palette length does not match number of\nfactors. %s will be assigned to `nan_color` %s\"\"\" % (extra_factors, self.nan_color))\n\n\n@abstract\nclass ContinuousColorMapper(ColorMapper):\n    \"\"\" Base class for cotinuous color mapper types. ``ContinuousColorMapper`` is not\n    generally useful to instantiate on its own.\n\n    \"\"\"\n\n    low = Float(help=\"\"\"\n    The minimum value of the range to map into the palette. Values below\n    this are clamped to ``low``.\n    \"\"\")\n\n    high = Float(help=\"\"\"\n    The maximum value of the range to map into the palette. Values above\n    this are clamped to ``high``.\n    \"\"\")\n\n\nclass LinearColorMapper(ContinuousColorMapper):\n    \"\"\" Map numbers in a range [*low*, *high*] linearly into a\n    sequence of colors (a palette).\n\n    For example, if the range is [0, 99] and the palette is\n    ``['red', 'green', 'blue']``, the values would be mapped as\n    follows::\n\n             x < 0  : 'red'     # values < low are clamped\n        0 >= x < 33 : 'red'\n       33 >= x < 66 : 'green'\n       66 >= x < 99 : 'blue'\n       99 >= x      : 'blue'    # values > high are clamped\n\n    \"\"\"\n\n\nclass LogColorMapper(ContinuousColorMapper):\n    \"\"\" Map numbers in a range [*low*, *high*] into a\n    sequence of colors (a palette) on a natural logarithm scale.\n\n    For example, if the range is [0, 25] and the palette is\n    ``['red', 'green', 'blue']``, the values would be mapped as\n    follows::\n\n                x < 0     : 'red'     # values < low are clamped\n       0     >= x < 2.72  : 'red'     # math.e ** 1\n       2.72  >= x < 7.39  : 'green'   # math.e ** 2\n       7.39  >= x < 20.09 : 'blue'    # math.e ** 3\n       20.09 >= x         : 'blue'    # values > high are clamped\n\n    .. warning::\n        The LogColorMapper only works for images with scalar values that are\n        non-negative.\n\n    \"\"\"\n", "path": "bokeh/models/mappers.py"}, {"content": "import numpy as np\n\nfrom bokeh.io import show\nfrom bokeh.layouts import gridplot\nfrom bokeh.models import (\n    ColumnDataSource,\n    ColorBar,\n    LinearColorMapper,\n    LogColorMapper,\n)\nfrom bokeh.palettes import Viridis3, Viridis256\nfrom bokeh.plotting import figure\n\nx = np.random.random(2500) * 100\ny = np.random.normal(size=2500) * 2 + 5\nsource = ColumnDataSource(dict(x=x, y=y))\nopts = dict(x='x', line_color=None, source=source)\n\n\ndef make_plot(mapper, title):\n    p = figure(toolbar_location=None, tools='', title=title)\n    color_bar = ColorBar(color_mapper=mapper, location=(0, 0))\n    p.circle(\n        x='x', y='y',\n        fill_color={'field': 'x', 'transform': mapper}, line_color=None,\n        source=source\n    )\n    p.add_layout(color_bar, 'right')\n    return p\n\np1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear')\np2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log')\np3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear')\np4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log')\n\nshow(gridplot([p1, p2, p3, p4], ncols=2, plot_width=400, plot_height=300, toolbar_location=None))\n", "path": "examples/plotting/file/color_data_map.py"}], "after_files": [{"content": "\"\"\" Models for mapping values from one range or space to another.\n\n\"\"\"\nfrom __future__ import absolute_import\nimport warnings\n\nfrom ..model import Model\nfrom ..core.properties import abstract\nfrom ..core.properties import Color, Enum, Seq, Either, String, Int, Float, Date, Datetime\nfrom ..core.enums import Palette\nfrom .. import palettes\n\n\n@abstract\nclass ColorMapper(Model):\n    \"\"\" Base class for color mapper types. ``ColorMapper`` is not\n    generally useful to instantiate on its own.\n\n    \"\"\"\n\n    palette = Seq(Color, help=\"\"\"\n    A sequence of colors to use as the target palette for mapping.\n\n    This property can also be set as a ``String``, to the name of\n    any of the palettes shown in :ref:`bokeh.palettes`.\n    \"\"\").accepts(Enum(Palette), lambda pal: getattr(palettes, pal))\n\n    nan_color = Color(default=\"gray\", help=\"\"\"\n    Color to be used if data is NaN. Default: 'gray'\n    \"\"\")\n\n    def __init__(self, palette=None, **kwargs):\n        if palette is not None:\n            kwargs['palette'] = palette\n        super(ColorMapper, self).__init__(**kwargs)\n\n\nclass CategoricalColorMapper(ColorMapper):\n    \"\"\" Map categories to colors. Values that are passed to\n    this mapper that aren't in factors will be assigned the nan_color.\n\n    \"\"\"\n\n    factors = Either(Seq(String), Seq(Int), Seq(Float), Seq(Datetime), Seq(Date), help=\"\"\"\n    A sequence of factors / categories that map to the color palette.\n    \"\"\")\n\n\n    def __init__(self, **kwargs):\n        super(ColorMapper, self).__init__(**kwargs)\n        palette = self.palette\n        factors = self.factors\n        if palette and factors:\n            if len(palette) < len(factors):\n                extra_factors = factors[len(palette):]\n                warnings.warn(\"\"\"Palette length does not match number of\nfactors. %s will be assigned to `nan_color` %s\"\"\" % (extra_factors, self.nan_color))\n\n\n@abstract\nclass ContinuousColorMapper(ColorMapper):\n    \"\"\" Base class for cotinuous color mapper types. ``ContinuousColorMapper`` is not\n    generally useful to instantiate on its own.\n\n    \"\"\"\n\n    low = Float(help=\"\"\"\n    The minimum value of the range to map into the palette. Values below\n    this are clamped to ``low``.\n    \"\"\")\n\n    high = Float(help=\"\"\"\n    The maximum value of the range to map into the palette. Values above\n    this are clamped to ``high``.\n    \"\"\")\n\n    low_color = Color(default=None, help=\"\"\"\n    Color to be used if data is lower than ``low`` value. If None,\n    values lower than ``low`` are mapped to the first color in the palette.\n    \"\"\")\n\n    high_color = Color(default=None, help=\"\"\"\n    Color to be used if data is lower than ``high`` value. If None,\n    values lower than ``high`` are mapped to the last color in the palette.\n    \"\"\")\n\nclass LinearColorMapper(ContinuousColorMapper):\n    \"\"\" Map numbers in a range [*low*, *high*] linearly into a\n    sequence of colors (a palette).\n\n    For example, if the range is [0, 99] and the palette is\n    ``['red', 'green', 'blue']``, the values would be mapped as\n    follows::\n\n             x < 0  : 'red'     # values < low are clamped\n        0 >= x < 33 : 'red'\n       33 >= x < 66 : 'green'\n       66 >= x < 99 : 'blue'\n       99 >= x      : 'blue'    # values > high are clamped\n\n    \"\"\"\n\n\n\nclass LogColorMapper(ContinuousColorMapper):\n    \"\"\" Map numbers in a range [*low*, *high*] into a\n    sequence of colors (a palette) on a natural logarithm scale.\n\n    For example, if the range is [0, 25] and the palette is\n    ``['red', 'green', 'blue']``, the values would be mapped as\n    follows::\n\n                x < 0     : 'red'     # values < low are clamped\n       0     >= x < 2.72  : 'red'     # math.e ** 1\n       2.72  >= x < 7.39  : 'green'   # math.e ** 2\n       7.39  >= x < 20.09 : 'blue'    # math.e ** 3\n       20.09 >= x         : 'blue'    # values > high are clamped\n\n    .. warning::\n        The LogColorMapper only works for images with scalar values that are\n        non-negative.\n\n    \"\"\"\n", "path": "bokeh/models/mappers.py"}, {"content": "import numpy as np\n\nfrom bokeh.io import show\nfrom bokeh.layouts import gridplot\nfrom bokeh.models import (\n    ColumnDataSource,\n    ColorBar,\n    LinearColorMapper,\n    LogColorMapper,\n)\nfrom bokeh.palettes import Viridis3, Viridis256\nfrom bokeh.plotting import figure\n\nx = np.random.random(2500) * 140 - 20\ny = np.random.normal(size=2500) * 2 + 5\nsource = ColumnDataSource(dict(x=x, y=y))\nopts = dict(x='x', line_color=None, source=source)\n\n\ndef make_plot(mapper, title):\n    mapper.low_color = 'blue'\n    mapper.high_color = 'red'\n    p = figure(toolbar_location=None, tools='', title=title)\n    color_bar = ColorBar(color_mapper=mapper, location=(0, 0))\n    p.circle(\n        x='x', y='y',\n        fill_color={'field': 'x', 'transform': mapper}, line_color=None,\n        source=source\n    )\n    p.add_layout(color_bar, 'right')\n    return p\n\np1 = make_plot(LinearColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Linear, low/high = blue/red')\np2 = make_plot(LogColorMapper(palette=Viridis256, low=0, high=100), title='Viridis256 - Log, low/high = blue/red')\np3 = make_plot(LinearColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Linear, low/high = blue/red')\np4 = make_plot(LogColorMapper(palette=Viridis3, low=0, high=100), title='Viridis3 - Log, low/high =, blue/red')\n\nshow(gridplot([p1, p2, p3, p4], ncols=2, plot_width=400, plot_height=300, toolbar_location=None))\n", "path": "examples/plotting/file/color_data_map.py"}]}