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?

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") 

  • Schnittpunkt von zwei Graphen in Python, finden Sie den x-Wert:
  • Variiere die Farbe jedes Balkens in Bargraph mit besonderem Wert
  • Wie zeichnet man Daten aus mehreren zwei Spalten Textdateien mit Legenden in Matplotlib?
  • Gleiche gespeicherte Daten erzeugen unterschiedliche Bilder - Python
  • Verbinden von zwei Punkten in einem 3D-Scatter-Plot in Python und Matplotlib
  • Wie man ein Pandas-Plot, Matplotlib-Plot und Achse überlagert
  • 3d plotten mit python
  • Wie man colormap mit absoluten Werten mit matplotlib definiert
  • 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.