Farbskala – nahe, aber nicht nah genug

Ich versuche, eine Handlung zu produzieren, die die gleiche Farbe wie das Met Office verwendet, also kann ich meine Plots leicht mit ihren vergleichen. Ein Beispiel von ihnen ist hier

Meine derzeitige Bemühung ist hier: Hier

Ich schätze meinen Code ist unordentlich – ich konnte keinen Weg finden, eine Farbe für Werte über einer bestimmten Schwelle zu setzen (sonst geht es weiß), also die Schleife.

Ich würde die NetCDF-Datei hochladen, aber ich habe kein hoch genug Rep, um das zu tun.

Viele, vielen Dank im Voraus für jede Hilfe.

Mein Code für das Plotten ist unten gezeigt.

from Scientific.IO.NetCDF import NetCDFFile from mpl_toolkits.basemap import Basemap from matplotlib import pyplot as plt import numpy as np myfile = NetCDFFile('ERA_Dec_89-94.nc', 'r') Lat = NetCDFFile('/home/james/Documents/Lat_Lon_NC_Files/latitudes_d02.nc','r') Long = NetCDFFile('/home/james/Documents/Lat_Lon_NC_Files/longitudes_d02.nc','r') XLAT = Lat.variables['XLAT'][:] XLONG = Long.variables['XLONG'][:] ERA_Data = myfile.variables['Monthlyrain'][:] plot = np.zeros([1000,1730]) plot[:,:] = np.average(ERA_Data[:,:,:],axis=0) m = Basemap(projection='merc',resolution='f',llcrnrlat=49,llcrnrlon=-11,urcrnrlat=61,urcrnrlon=3) m.drawparallels(np.arange(-90., 91., 5.), labels=[1,0,0,0], fontsize=11) m.drawmeridians(np.arange(-180., 181., 5.), labels=[0,0,0,1], fontsize=11) m.drawcoastlines() X, Y = m(XLONG, XLAT) for i in range(0,1729): for j in range(0,999): if plot[j,i] >250: plot[j,i] = 250.001 if plot[j,i] < 40: plot[j,i] = 40 scale = [40,40.001,60,80,100,125,150,200,250, 250.001] cs = m.contourf(X,Y,plot,scale, cmap='PuOr') cbar = m.colorbar(cs, ticks= [40.0005,50,70,90,112.5,137.5,175,225,250.0005]) cbar.set_ticklabels(['<40','40-60', '60-80', '80-100', '100-125', '125-150', '150-200', '200-250', '>250']) plt.title('Some Title') cbar.set_label('Monthly average rainfall (mm)') print "Finished" plt.show() 

2 Solutions collect form web for “Farbskala – nahe, aber nicht nah genug”

Der erste Teil (immer die Farben richtig) wurde bereits beantwortet . Um die Werte auf einen bestimmten Bereich zu beschränken, haben Sie mehrere Möglichkeiten.

  • Verwenden Sie cmap.set_over und cmap.set_under , um Out-of-bounds-Farben zu setzen, wie hier beschrieben

  • np.clip anstelle der Schleife verwenden, um die Werte auf einen certian Bereich zu beschränken:

    plot = np.clip(plot, 40, 250)

Wenn das Problem einfach die Farbkarte ist, kannst du die RGB-Komponenten der Farben aus deinem Bildschirm ListedColormap und sie in eine ListedColormap , die den Grenzen des Niederschlags in der Tabelle, die du als Beispiel ListedColormap , zugeordnet sind. Beispielsweise,

 bounds = [0, 40, 60, 80, 100, 125, 150, 200, 250, 1000] rgblist = [(51,0,0), (102,51,0), (153,102,51), (204,153,102), (255, 255, 255), (204,204,255), (153,153,255), (51,102,255), (0,0,153)] clist = [[c/255 for c in rgb] for rgb in rgblist] from matplotlib import colors cmap = colors.ListedColormap(clist) norm = colors.BoundaryNorm(bounds, cmap.N) ax.imshow(arr, cmap=cmap, norm=norm) plt.show() 
  • Inset-Achsen an bestimmten Punkten in Datenkoordinaten verankert?
  • Suche marker text option für pyplot.plot ()
  • Wie zeichne die Linie in einem Streudiagramm
  • Verständnis matplotlib.subplots python
  • Python Zeichnen Sie grafische Darstellung mit Prozentsatz der Häufigkeitsverteilung
  • Handlung und Std. Dev Bei bestimmten stündlichen Zecken mit Pandas
  • Python matplotlib überlagert Streudiagramme
  • Python matplotlib Kontur Plot logarithmische Farbskala
  • Wie man zwei 3D-Plots von Matrizen auf der gleichen Figur mit der gleichen Skala in Python zu plotten
  • Wie kann ich die Ausgabe von einer Funktion ausgeben, die mehrere Werte in Python zurückgibt?
  • Eine Legende in einem Seaborn bekommen FacetGrid Hitzeschlag
  • Python ist die beste Programmiersprache der Welt.