diff --git a/doc/users/colors.rst b/doc/users/colors.rst
index ccea8ea5d6f..f935edd5c93 100644
--- a/doc/users/colors.rst
+++ b/doc/users/colors.rst
@@ -4,57 +4,47 @@
Specifying Colors
*****************
-In almost all places in matplotlib where a color can be specified by the user it can be provided as:
+In almost all places in matplotlib where a color can be specified by the user
+it can be provided as:
* ``(r, g, b)`` tuples
* ``(r, g, b, a)`` tuples
* hex string, ex ``#OFOFOF``
* float value between [0, 1] for gray level
* One of ``{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}``
-* valid css4/X11 color names
-* valid name from the `XKCD color survey
+* valid CSS4/X11 color names
+* valid name from the `xkcd color survey
`__ These
- names are available both with and with out spaces. In the case of name clashes
- the css/X11 names have priority. To ensure colors
- from the XKCD mapping are used prefix the space-less name with
- ``'XKCD'``.
+ names are prefixed with ``'xkcd:'`` (e.g., ``'xkcd:sky blue'``) to
+ prevent name clashes with the CSS4/X11 names.
All string specifications of color are case-insensitive.
Internally, mpl is moving to storing all colors as RGBA float quadruples.
-Name clash between CSS4/X11 and XKCD
-------------------------------------
-
-The color names in the XKCD survey include spaces (unlike css4/X11
-names). Matplotlib exposes all of the XKCD colors both with and
-without spaces.
-
-There are 95 (out of 148 colors in the css color list) conflicts
-between the css4/X11 names and the XKCD names. Given that these are
-the standard color names of the web, matplotlib should follow these
-conventions. To accesses the XKCD colors which are shadowed by css4,
-prefix the colorname with ``'XKCD'``, for example ``'blue'`` maps to
-``'#0000FF'`` where as ``'XKCDblue'`` maps to ``'#0343DF'``.
+There are 95 (out of 148 colors in the css color list) conflicts between the
+CSS4/X11 names and the xkcd names. Given that the former are the standard
+color names of the web, matplotlib should follow them. Thus, xkcd color names
+are prefixed with ``'xkcd:'``, for example ``'blue'`` maps to ``'#0000FF'``
+where as ``'xkcd:blue'`` maps to ``'#0343DF'``.
.. plot::
import matplotlib.pyplot as plt
import matplotlib._color_data as mcd
-
import matplotlib.patches as mpatch
- overlap = (set(mcd.CSS4_COLORS) & set(mcd.XKCD_COLORS))
+
+ overlap = {name for name in mcd.CSS4_COLORS
+ if "xkcd:" + name in mcd.XKCD_COLORS}
fig = plt.figure(figsize=[4.8, 16])
ax = fig.add_axes([0, 0, 1, 1])
- j = 0
-
- for n in sorted(overlap, reverse=True):
+ for j, n in enumerate(sorted(overlap, reverse=True)):
cn = mcd.CSS4_COLORS[n]
- xkcd = mcd.XKCD_COLORS[n].upper()
+ xkcd = mcd.XKCD_COLORS["xkcd:" + n].upper()
if cn != xkcd:
- print (n, cn, xkcd)
+ print(n, cn, xkcd)
r1 = mpatch.Rectangle((0, j), 1, 1, color=cn)
r2 = mpatch.Rectangle((1, j), 1, 1, color=xkcd)
@@ -62,10 +52,9 @@ prefix the colorname with ``'XKCD'``, for example ``'blue'`` maps to
ax.add_patch(r1)
ax.add_patch(r2)
ax.axhline(j, color='k')
- j += 1
- ax.text(.5, j+.1, 'X11', ha='center')
- ax.text(1.5, j+.1, 'XKCD', ha='center')
+ ax.text(.5, j + .1, 'X11', ha='center')
+ ax.text(1.5, j + .1, 'XKCD', ha='center')
ax.set_xlim(0, 3)
ax.set_ylim(0, j + 1)
ax.axis('off')
diff --git a/lib/matplotlib/_color_data.py b/lib/matplotlib/_color_data.py
index 52351093cb3..f19c3e5d4af 100644
--- a/lib/matplotlib/_color_data.py
+++ b/lib/matplotlib/_color_data.py
@@ -961,14 +961,9 @@
'green': '#15b01a',
'purple': '#7e1e9c'}
-# normalize to names with no spaces and provide versions with XKCD
-# prefix.
-for k in list(XKCD_COLORS):
- XKCD_COLORS['xkcd'+k] = XKCD_COLORS[k]
- _k = k.replace(' ', '')
- if _k != k:
- XKCD_COLORS[_k] = XKCD_COLORS[k]
- XKCD_COLORS['xkcd'+_k] = XKCD_COLORS[k]
+
+# Normalize name to "xkcd:" to avoid name collisions.
+XKCD_COLORS = {'xkcd:' + name: value for name, value in XKCD_COLORS.items()}
# https://drafts.csswg.org/css-color-4/#named-colors
diff --git a/lib/matplotlib/tests/test_colors.py b/lib/matplotlib/tests/test_colors.py
index c979eab6893..193ce0094c1 100644
--- a/lib/matplotlib/tests/test_colors.py
+++ b/lib/matplotlib/tests/test_colors.py
@@ -563,7 +563,7 @@ def test_xkcd():
mcolors.colorConverter.to_rgb('blue'))
assert x11_blue == '#0000ff'
XKCD_blue = mcolors.rgb2hex(
- mcolors.colorConverter.to_rgb('XKCDblue'))
+ mcolors.colorConverter.to_rgb('xkcd:blue'))
assert XKCD_blue == '#0343df'
@@ -621,7 +621,7 @@ def test_cn():
assert red == '#ff0000'
matplotlib.rcParams['axes.prop_cycle'] = cycler('color',
- ['XKCDblue', 'r'])
+ ['xkcd:blue', 'r'])
XKCD_blue = mcolors.rgb2hex(mcolors.colorConverter.to_rgb('C0'))
assert XKCD_blue == '#0343df'
red = mcolors.rgb2hex(mcolors.colorConverter.to_rgb('C1'))