- Specifying colors#
- Transparency#
- «CN» color selection#
- Comparison between X11/CSS4 and xkcd colors#
- Convert RGB to hex color code in Python
- Difference between RGB and hex color
- Conversion of RGB to hex and vice-versa in Python
- 3 responses to “Convert RGB to hex color code in Python”
- List of named colors#
- Base colors#
- Tableau Palette#
Specifying colors#
Matplotlib recognizes the following formats to specify a color.
RGB or RGBA (red, green, blue, alpha) tuple of float values in a closed interval [0, 1].
Case-insensitive hex RGB or RGBA string.
Case-insensitive RGB or RGBA string equivalent hex shorthand of duplicated characters.
String representation of float value in closed interval [0, 1] for grayscale values.
Single character shorthand notation for some basic colors.
The colors green, cyan, magenta, and yellow do not coincide with X11/CSS4 colors. Their particular shades were chosen for better visibility of colored lines against typical backgrounds.
- ‘b’ as blue
- ‘g’ as green
- ‘r’ as red
- ‘c’ as cyan
- ‘m’ as magenta
- ‘y’ as yellow
- ‘k’ as black
- ‘w’ as white
Case-insensitive X11/CSS4 color name with no spaces.
Case-insensitive color name from xkcd color survey with ‘xkcd:’ prefix.
Case-insensitive Tableau Colors from ‘T10’ categorical palette.
This is the default color cycle.
- ‘tab:blue’
- ‘tab:orange’
- ‘tab:green’
- ‘tab:red’
- ‘tab:purple’
- ‘tab:brown’
- ‘tab:pink’
- ‘tab:gray’
- ‘tab:olive’
- ‘tab:cyan’
«CN» color spec where ‘C’ precedes a number acting as an index into the default property cycle.
Matplotlib indexes color at draw time and defaults to black if cycle does not include color.
rcParams[«axes.prop_cycle»] (default: cycler(‘color’, [‘#1f77b4’, ‘#ff7f0e’, ‘#2ca02c’, ‘#d62728’, ‘#9467bd’, ‘#8c564b’, ‘#e377c2’, ‘#7f7f7f’, ‘#bcbd22’, ‘#17becf’]) )
«Red», «Green», and «Blue» are the intensities of those colors. In combination, they represent the colorspace.
Transparency#
The alpha value of a color specifies its transparency, where 0 is fully transparent and 1 is fully opaque. When a color is semi-transparent, the background color will show through.
The alpha value determines the resulting color by blending the foreground color with the background color according to the formula
The following plot illustrates the effect of transparency.
import matplotlib.pyplot as plt from matplotlib.patches import Rectangle import numpy as np fig, ax = plt.subplots(figsize=(6.5, 1.65), layout='constrained') ax.add_patch(Rectangle((-0.2, -0.35), 11.2, 0.7, color='C1', alpha=0.8)) for i, alpha in enumerate(np.linspace(0, 1, 11)): ax.add_patch(Rectangle((i, 0.05), 0.8, 0.6, alpha=alpha, zorder=0)) ax.text(i+0.4, 0.85, f"alpha:.1f>", ha='center') ax.add_patch(Rectangle((i, -0.05), 0.8, -0.6, alpha=alpha, zorder=2)) ax.set_xlim(-0.2, 13) ax.set_ylim(-1, 1) ax.set_title('alpha values') ax.text(11.3, 0.6, 'zorder=1', va='center', color='C0') ax.text(11.3, 0, 'zorder=2\nalpha=0.8', va='center', color='C1') ax.text(11.3, -0.6, 'zorder=3', va='center', color='C0') ax.axis('off')
The orange rectangle is semi-transparent with alpha = 0.8. The top row of blue squares is drawn below and the bottom row of blue squares is drawn on top of the orange rectangle.
See also Zorder Demo to learn more on the drawing order.
«CN» color selection#
Matplotlib converts «CN» colors to RGBA when drawing Artists. The Styling with cycler section contains additional information about controlling colors and style properties.
import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl th = np.linspace(0, 2*np.pi, 128) def demo(sty): mpl.style.use(sty) fig, ax = plt.subplots(figsize=(3, 3)) ax.set_title('style: '.format(sty), color='C0') ax.plot(th, np.cos(th), 'C1', label='C1') ax.plot(th, np.sin(th), 'C2', label='C2') ax.legend() demo('default') demo('seaborn-v0_8')
The first color ‘C0’ is the title. Each plot uses the second and third colors of each style’s rcParams[«axes.prop_cycle»] (default: cycler(‘color’, [‘#1f77b4’, ‘#ff7f0e’, ‘#2ca02c’, ‘#d62728’, ‘#9467bd’, ‘#8c564b’, ‘#e377c2’, ‘#7f7f7f’, ‘#bcbd22’, ‘#17becf’]) ). They are ‘C1’ and ‘C2’ , respectively.
Comparison between X11/CSS4 and xkcd colors#
95 out of the 148 X11/CSS4 color names also appear in the xkcd color survey. Almost all of them map to different color values in the X11/CSS4 and in the xkcd palette. Only ‘black’, ‘white’ and ‘cyan’ are identical.
For example, ‘blue’ maps to ‘#0000FF’ whereas ‘xkcd:blue’ maps to ‘#0343DF’ . Due to these name collisions, all xkcd colors have the ‘xkcd:’ prefix.
The visual below shows name collisions. Color names where color values agree are in bold.
import matplotlib.colors as mcolors import matplotlib.patches as mpatch overlap = name for name in mcolors.CSS4_COLORS if f'xkcd:name>' in mcolors.XKCD_COLORS> fig = plt.figure(figsize=[9, 5]) ax = fig.add_axes([0, 0, 1, 1]) n_groups = 3 n_rows = len(overlap) // n_groups + 1 for j, color_name in enumerate(sorted(overlap)): css4 = mcolors.CSS4_COLORS[color_name] xkcd = mcolors.XKCD_COLORS[f'xkcd:color_name>'].upper() # Pick text colour based on perceived luminance. rgba = mcolors.to_rgba_array([css4, xkcd]) luma = 0.299 * rgba[:, 0] + 0.587 * rgba[:, 1] + 0.114 * rgba[:, 2] css4_text_color = 'k' if luma[0] > 0.5 else 'w' xkcd_text_color = 'k' if luma[1] > 0.5 else 'w' col_shift = (j // n_rows) * 3 y_pos = j % n_rows text_args = dict(fontsize=10, weight='bold' if css4 == xkcd else None) ax.add_patch(mpatch.Rectangle((0 + col_shift, y_pos), 1, 1, color=css4)) ax.add_patch(mpatch.Rectangle((1 + col_shift, y_pos), 1, 1, color=xkcd)) ax.text(0.5 + col_shift, y_pos + .7, css4, color=css4_text_color, ha='center', **text_args) ax.text(1.5 + col_shift, y_pos + .7, xkcd, color=xkcd_text_color, ha='center', **text_args) ax.text(2 + col_shift, y_pos + .7, f' color_name>', **text_args) for g in range(n_groups): ax.hlines(range(n_rows), 3*g, 3*g + 2.8, color='0.7', linewidth=1) ax.text(0.5 + 3*g, -0.3, 'X11/CSS4', ha='center') ax.text(1.5 + 3*g, -0.3, 'xkcd', ha='center') ax.set_xlim(0, 3 * n_groups) ax.set_ylim(n_rows, -1) ax.axis('off') plt.show()
Total running time of the script: ( 0 minutes 2.179 seconds)
Convert RGB to hex color code in Python
In this article, we are going to learn about how to convert RGB to hex color code in python. This article is mainly for the conversion of RGB to hex color code but we will also see the reverse of this how-to convert hex color code to RGB in python. Before moving further we need to understand that what is RGB and hex color.
Difference between RGB and hex color
RGB color :- In RGB color R stands for Red, G stands for Green, and B stands for Blue, and it ranges from the decimal value of 0 – 255. Therefore for every set of color have 256 combinations of color. So, the total possible value of color available is (256 x 256 x 256) i.e. 16,777,216. Example:- (255,0,0) –> this color is red.
Hex color :- A hex color code is a unique way to express color using the hexadecimal values. The code is written in a hex triplet, which represents each value that specifies the components of the colors. The code always starts with a hashtag sign (#) and after this sign, six hex value or three hex value pair is written. Example:- #bab7c8
Conversion of RGB to hex and vice-versa in Python
There are many methods available for the conversion of RGB to hex and vice-versa. Let’s understand with some examples:-
def rgb_to_hex(rgb): return '%02x%02x%02x' % rgb rgb_to_hex((255, 255, 195))
Output:- ‘ffffc3‘
In the above example, we created a function and passed the RGB value as an argument inside it and we converted RGB into Hex using the string conversion.
def hex_to_rgb(value): value = value.lstrip('#') lv = len(value) return tuple(int(value[i:i+lv//3], 16) for i in range(0, lv, lv//3)) hex_to_rgb("FF65BA")
Output:- (255, 102, 186)
In the above example, we created the function to convert Hex to RGB and passed the string inside it and then converted it to the tuple of integers.
import matplotlib print(matplotlib.colors.to_hex([ 0.47, 0.0, 1.0 ])) print(matplotlib.colors.to_hex([ 0.7, 0.321, 0.3, 0.5 ], keep_alpha=True)) print(matplotlib.colors.to_rgb("#aabbcc")) print(matplotlib.colors.to_rgb("#ddee9f"))
#7800ff #b2524c80 (0.6666666666666666, 0.7333333333333333, 0.8) (0.8666666666666667, 0.9333333333333333, 0.6235294117647059)
In this example, we imported the required module i.e. matplotlib and then used the function “colors.to_hex” and “colors.to_rgb” and passed the required value inside each function. In one of the examples, we passed four arguments inside the function colors.to_hex, the fourth argument is for the opacity of the color. Opacity varies from 0 to 1.
3 responses to “Convert RGB to hex color code in Python”
def rgb_to_hex(rgb):
return ‘%02x%02x%02x’ % rgb
rgb_to_hex((255, 255, 195)) this code is not right. what is rgb? is it r*b*g? or merged or what?
#it works.
def rgb_to_hex(rgb):
r,g,b=rgb
return ‘#%02x%02x%02x’ % (r,g,b)
print(rgb_to_hex((0, 34, 255)))
List of named colors#
First we define a helper function for making a table of colors, then we use it on some common color categories.
import math from matplotlib.patches import Rectangle import matplotlib.pyplot as plt import matplotlib.colors as mcolors def plot_colortable(colors, *, ncols=4, sort_colors=True): cell_width = 212 cell_height = 22 swatch_width = 48 margin = 12 # Sort colors by hue, saturation, value and name. if sort_colors is True: names = sorted( colors, key=lambda c: tuple(mcolors.rgb_to_hsv(mcolors.to_rgb(c)))) else: names = list(colors) n = len(names) nrows = math.ceil(n / ncols) width = cell_width * 4 + 2 * margin height = cell_height * nrows + 2 * margin dpi = 72 fig, ax = plt.subplots(figsize=(width / dpi, height / dpi), dpi=dpi) fig.subplots_adjust(margin/width, margin/height, (width-margin)/width, (height-margin)/height) ax.set_xlim(0, cell_width * 4) ax.set_ylim(cell_height * (nrows-0.5), -cell_height/2.) ax.yaxis.set_visible(False) ax.xaxis.set_visible(False) ax.set_axis_off() for i, name in enumerate(names): row = i % nrows col = i // nrows y = row * cell_height swatch_start_x = cell_width * col text_pos_x = cell_width * col + swatch_width + 7 ax.text(text_pos_x, y, name, fontsize=14, horizontalalignment='left', verticalalignment='center') ax.add_patch( Rectangle(xy=(swatch_start_x, y-9), width=swatch_width, height=18, facecolor=colors[name], edgecolor='0.7') ) return fig