Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Displaying matrix-like image with RGB-colored cells in matplotlib

I have a sequence of 3 (or more) colors stored as RGB values (or corresponding hex) and I would like to display them as below:

enter image description here

Following and modifying the suggestions here I was able to get somewhat close, though I am not quite sure I understand how colors are being represented there as a single float. Is there anyway I can convert an RGB/hex representation to whatever matshow() uses? Alternatively, is there a more elegant way of producing the above output? Thanks!

like image 636
Everaldo Aguiar Avatar asked Oct 02 '22 13:10

Everaldo Aguiar


1 Answers

There is a wrapper called seaborn that sits on top of matplotlib that does nice job of displaying the colormap or selected colors. For example:

sns.palplot(sns.color_palette("coolwarm", 7))

enter image description here

I suggest this over standard matplotlib since it exposes more support for working with color schemes and conversions as mentioned in the other part of your question. If you don't want to use an outside library, just modify the source code that plots this:

def palplot(pal, size=1):
    """Plot the values in a color palette as a horizontal array.

    Parameters
    ----------
    pal : sequence of matplotlib colors
        colors, i.e. as returned by seaborn.color_palette()
    size :
        scaling factor for size of plot

    """
    n = len(pal)
    f, ax = plt.subplots(1, 1, figsize=(n * size, size))
    ax.imshow(np.arange(n).reshape(1, n),
              cmap=mpl.colors.ListedColormap(list(pal)),
              interpolation="nearest", aspect="auto")
    ax.set_xticks(np.arange(n) - .5)
    ax.set_yticks([-.5, .5])
    ax.set_xticklabels([])
    ax.set_yticklabels([])
like image 121
Hooked Avatar answered Oct 12 '22 09:10

Hooked