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?

  • Zurücksetzen der Standard-Matplotlib-Farbwerte nach der Verwendung von 'set_under' oder 'set_over'
  • Custom colourmaps in matplotlib
  • Matplotlib-Colormap-Bug mit Längen-4-Arrays
  • Python - Linienfarbe der 3D-parametrischen Kurve
  • Wie dekodiere ich die Farbabbildung in der Farbpalette von matplotlib?
  • Verwenden Sie eine Variable, um Alpha-Deckkraft in einer Farbkarte festzulegen
  • 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") 

  • Senden Sie die Tabelle als E-Mail-Körper (nicht Anhang) in Python
  • Python Variable in einer HTML-E-Mail in Python
  • Unnötige Ausrufezeichen (!) Im HTML-Code
  • Einbetten Bild in E-Mail Python
  • Senden von HTML-E-Mails mit Python
  • 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.