2017-07-04 1 views
0

Je l'ai regardé dans une variété d'endroits pour savoir comment faire cela, mais ne l'ont pas été en mesure de trouver exactement ce que je dois/FIND validation si cela est encore possible.Créer une palette de couleurs pour un histogramme basé hors d'un tableau de données

I ont un histogramme 2d de hauteur sur l'axe y (donnée par RDATA1) et l'intensité sur l'axe x (donnée par l'intensité). L'histogramme trace bien, mais j'aimerais redimensionner la barre de couleurs plutôt que de la normaliser.

Je l'ai déjà défini une correspondance de couleurs, et je veux simplement à l'échelle à l'aide de mes données tracées.

je voudrais à l'échelle les données afin que le colorbar (qui se déroule actuellement de 0-1) échelles de 0 à (nombre de points dans bin)/(len (temps)). C'est ainsi que je peux trouver la probabilité d'un point étant dans un certain bin d'intensité à une certaine taille. Je ne savais pas si je devais faire un deuxième histogramme (que je ne tracerais pas) et exporter les valeurs max/min de cela pour redimensionner la barre de couleurs, ou utiliser un certain nombre de boucles for et de listes pour ajouter des valeurs dans des cases pour chaque hauteur, puis max/min le nombre de valeurs dans ces cases.

code

est joint ci-dessous:

import numpy as np 
import file_reader as fr 
import matplotlib.pyplot as plt 
from matplotlib.colors import LinearSegmentedColormap 
import matplotlib as mpl 

time = [0.01649999991059303, 0.02584999985992908] 
rdata = [-600.020751953125, -570.04150390625, -540.062255859375, -510.0830078125, -480.1037902832031, -450.1245422363281, -420.1452941894531, -390.1660461425781, -360.1867980957031, -330.2075500488281] 
intensity = [[-37.32464981079102, -38.3233528137207], [-37.70231628417969, -38.05134201049805], [-38.27889251708984, -38.82979583740234], [-28.01022720336914, -27.68825912475586], [-8.408446311950684, -8.440451622009277], [-8.749446868896484, -8.750232696533203], [-9.431790351867676, -9.41820240020752], [-10.09048461914062, -10.23848724365234], [-10.84317588806152, -10.84869194030762], [-11.61933135986328, -11.67543029785156]] 

range_bins = np.linspace(rdata[0],rdata[-1],(len(rdata)+1)) 
intensity_bins = np.linspace(-70,30,100) 

intensity = np.array(intensity).ravel() 
rdata1 = np.repeat(rdata,len(time)) 

cdict = {'red': ((0.0, 1.0, 1.0), 
       (0.25, 0.0, 0.0), 
       (0.55, 0.35, 0.35), 
       (0.75, 0.75, 0.75), 
       (1.0, 1.0, 1.0)), 

     'green': ((0.0, 1.0, 1.0), 
       (0.25, 0.1, 0.1), 
       (0.55, 0.6, 0.6), 
       (0.75, 0.8, 0.8), 
       (1.0, 0.0, 0.0)), 

     'blue': ((0.0, 1.0, 1.0), 
       (0.25, 1.0, 1.0), 
       (0.55, 0.2, 0.2), 
       (0.75, 0.1, 0.1), 
       (1.0, 0.0, 0.0)) 
     } 

radar_map = LinearSegmentedColormap('radar_map', cdict) 

H, range_bins, intensity_bins = np.histogram2d(rdata1,intensity,bins=(range_bins,intensity_bins)) 

fig = plt.figure() 
X,Y = np.meshgrid(intensity_bins,range_bins) 
plt.pcolormesh(X,Y,H, cmap=radar_map) 

cax = fig.add_axes([0.95, 0.2, 0.02, 0.6]) 
cb = mpl.colorbar.ColorbarBase(cax, cmap=radar_map, spacing='proportional') 

Toute aide à ce serait massivement apprécié. Désolé pour le poste plutôt long.

+0

Pouvez-vous fournir plutôt un [mcve] de la question (telle que l'on n'a pas besoin de désosser où les données de l'échantillon doit être placé dans votre code). – ImportanceOfBeingErnest

+0

J'ai édité mon poste pour fournir plus de clarté à mon problème, je l'espère – JackLidge

Répondre

0

À l'heure actuelle, la barre de couleurs est indépendante du pcolorme montré. Si vous liez la barre de couleurs à la pcolorme, elle évoluera automatiquement jusqu'au niveau minimum et maximum de la placette. Utilisez plt.colorbar(pc), où pc est le retour de la pcolormeh.

Pour normaliser les comptes d'histogramme vous pouvez diviser l'histogramme par quelque quantité que vous voulez, par exemple

plt.pcolormesh(X,Y,H/float(len(time))) 

Exemple:

fig = plt.figure() 
X,Y = np.meshgrid(intensity_bins,range_bins) 
pc = plt.pcolormesh(X,Y,H/float(len(time)), cmap=radar_map) 

cax = fig.add_axes([0.90, 0.2, 0.02, 0.6]) 
cb = plt.colorbar(pc, cax=cax) 

enter image description here

+0

Merci beaucoup, c'est résolu! – JackLidge