2010-09-30 4 views
3

Cher tous, J'essaie d'effectuer un nuage de points avec la couleur avec une barre de couleur associée. Je voudrais que la barre de couleurs ait des valeurs de chaîne plutôt que des valeurs numériques, car je compare deux ensembles de données différents ayant chacun des valeurs de couleur différentes (mais dans tous les cas entre des valeurs maximum et minimum). Voici le code que je utilisematplotlib pyplot colorbar question

import matplotlib.pyplot as plt 
import numpy as np 
from numpy import * 
from matplotlib import rc 
import pylab 
from pylab import * 
from matplotlib import mpl 
data = np.loadtxt('deltaBinned.txt') 
data2 = np.loadtxt('deltaHalphaBinned.txt') 
fig=plt.figure() 
fig.subplots_adjust(bottom=0.1) 
ax=fig.add_subplot(111) 
plt.xlabel(r'$\partial \Delta/\partial\Phi[$mm$/^{\circ}]$',fontsize=16) 
plt.ylabel(r'$\Delta$ [mm]',fontsize=16) 
plt.scatter(data[:,0],data[:,1],marker='o',c=data[:,3],s=data[:,3]*1500,cmap=cm.Spectral,vmin=min(data[:,3]),vmax=max(data[:,3])) 
plt.scatter(data2[:,0],data2[:,1],marker='^',c=data2[:,2],s=data2[:,2]*500,cmap=cm.Spectral,vmin=min(data2[:,2]),vmax=max(data2[:,2])) 
cbar=plt.colorbar(ticks=[min(data2[:,2]),max(data2[:,2])]) 
cbar.set_ticks(['Low','High']) 
cbar.set_label(r'PdF') 
plt.show() 

Malheureusement, il ne fonctionne pas comme cbar.set_ticks n'accepte pas les valeurs de chaîne. J'ai lu le ling http://matplotlib.sourceforge.net/examples/pylab_examples/colorbar_tick_labelling_demo.html mais je n'ai pas pu l'adapter à mon cas. Je m'excuse si la question est simple mais je suis juste au début de la programmation python Nicola.

Répondre

11
cbar.ax.set_yticklabels(['Low','High']) 

Par exemple,

import numpy as np 
import matplotlib.cm as cm 
import matplotlib.pyplot as plt 

data = np.random.random((10, 4)) 
data2 = np.random.random((10, 4)) 
plt.subplots_adjust(bottom = 0.1) 
plt.xlabel(r'$\partial \Delta/\partial\Phi[$mm$/^{\circ}]$', fontsize = 16) 
plt.ylabel(r'$\Delta$ [mm]', fontsize = 16) 
plt.scatter(
    data[:, 0], data[:, 1], marker = 'o', c = data[:, 3], s = data[:, 3]*1500, 
    cmap = cm.Spectral, vmin = min(data[:, 3]), vmax = max(data[:, 3])) 
plt.scatter(
    data2[:, 0], data2[:, 1], marker = '^', c = data2[:, 2], s = data2[:, 2]*500, 
    cmap = cm.Spectral, vmin = min(data2[:, 2]), vmax = max(data2[:, 2])) 
cbar = plt.colorbar(ticks = [min(data2[:, 2]), max(data2[:, 2])]) 
cbar.ax.set_yticklabels(['Low', 'High']) 
cbar.set_label(r'PdF') 
plt.show() 

produit

alt text