Definiere eine Farbkarte für jeden Satz von Werten in einem Array

Ich habe ein Array mit 3 Satz von Werten, die ich färben möchte:

  • Für Werte zwischen 0 und 1 ( np.ma.masked_array(array, array > 1.) ) Ich möchte einen Gradienten ( cmap = cm.Greens zum Beispiel)
  • Für Werte gleich 2 ( np.ma.masked_array(array, array != 2.) ) Ich möchte, dass die Farbe rot ist
  • Für Werte gleich 3 ( np.ma.masked_array(array, array != 3.) ) Ich möchte, dass die Farbe grau ist

Soll ich eine Farbkarte für jeden Satz von Werten definieren und dann alle in eine Farbkarte verschmelzen? Wenn ja, wie gehe ich vor?

  • Matplotlib bar3d Variable alpha
  • Wie benutzt man viridis in matplotlib 1.4
  • Plotten mit mehr Farben in Matplotlib
  • Verwenden Sie eine Variable, um Alpha-Deckkraft in einer Farbkarte festzulegen
  • Python - Linienfarbe der 3D-parametrischen Kurve
  • Matplotlib-Colormap-Bug mit Längen-4-Arrays
  • Auf dieser Website ( http://scipy.github.io/old-wiki/pages/Cookbook/Matplotlib/Show_colormaps ) fand ich, dass Optionen wie ListedColormap oder LinearSegmentedColormap hilfreich LinearSegmentedColormap könnten, aber ich weiß nicht wirklich, wie man es benutzt, um zu bekommen was ich möchte.

    EDIT: Ich habe das gemacht und es funktioniert nicht, weil ich nicht weiß, wie man ListedColormap und LinearSegmentedColormap , um zu bekommen, was ich will

     from random import random import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as mcolors from matplotlib import cm from matplotlib.colors import ListedColormap n=11 tab = np.array([[random() for i in range(n)] for j in range(n)]) tab[1,2] = 2. tab[3,4] = 2. tab[5,6] = 3. tab[7,8] = 3. values1 = np.ma.masked_array(tab, tab > 1.) values2 = np.ma.masked_array(tab, tab != 2.) values3 = np.ma.masked_array(tab, tab != 3.) colors1 = cm.Greens colors2 = ListedColormap(['red'], 'indexed') colors3 = ListedColormap(['gray'], 'indexed') colors = np.vstack((colors1, colors2, colors3)) mycmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors) print plt.imshow(tab, cmap = mycmap, interpolation="none") 

  • Python Variable in einer HTML-E-Mail in Python
  • Senden Sie die Tabelle als E-Mail-Körper (nicht Anhang) in Python
  • Einbetten Bild in E-Mail Python
  • Senden von HTML-E-Mails mit Python
  • Unnötige Ausrufezeichen (!) Im HTML-Code
  • One Solution collect form web for “Definiere eine Farbkarte für jeden Satz von Werten in einem Array”

    Ein ListedColormap wird am besten für diskrete Werte verwendet, während ein LinearSegmentedColormap für kontinuierliche Werte einfacher erstellt wird. Vor allem, wenn eine vorhandene Farbkarte verwendet wird, ist eine LinearSegmentedColormap eine gute Wahl.

    Die LinearSegmentedColormap.from_list("name", colors) erwartet eine Liste von Farben, colors (keine Farbkarte!). Diese Liste kann mit einer vorhandenen Farbkarte erstellt werden, zB greens = cm.Greens(np.linspace(0,1, num=50)) mit 50 Farben aus dieser Karte. Für eine andere Farbe, die den gleichen Bereich abdeckt, können wir die gleiche Anzahl von Farben hinzufügen, zB alle rot oder grau.

    Ein Beispiel ist unten.

     from random import random import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as mcolors from matplotlib import cm n=11 tab = np.array([[random() for i in range(n)] for j in range(n)]) tab[1,2] = 2. tab[3,4] = 2. tab[5,6] = 3. tab[7,8] = 3. values1 = np.ma.masked_array(tab, tab > 1.) values2 = np.ma.masked_array(tab, tab != 2.) values3 = np.ma.masked_array(tab, tab != 3.) # 50 values for later use from 0 to 1 greens = cm.Greens(np.linspace(0,1, num=50)) # 25 values for later use from 1 to 1.5 greensfill = cm.Greens(np.ones(25)) # 50 values red for later use from 1.5 to 2.5 red = [(1,0,0,1)]*len(greens) # 50 values gray for later use from 2.5 to 3.5 gray = [(.5,.5,.5,1)]*len(greens) colors = np.vstack((greens, greensfill, red, gray)) # in total we now have 175 colors in the colormap mycmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors) #we now map those 175 colors to the range between 0 and 3.5 im = plt.imshow(tab, cmap = mycmap, interpolation="none", vmin=0, vmax=3.5) cb = plt.colorbar(im) cb.set_ticks([0,1,2,3]) plt.show() 

    Bildbeschreibung hier eingeben

    Hier sind die Farben aus der Liste in der endgültigen Farbkarte gleich beabstandet.

    Eine Alternative könnte sein, um Farben mit den jeweiligen Werten einzugeben.

     colors = [(0, "white"), (1./3.5, "green"), (1.5/3.5, "green"), (1.501/3.5, "red"), (2.5/3.5, "red"), (2.501/3.5, "gray"), (1, "gray") ] mycmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors) 
    Python ist die beste Programmiersprache der Welt.