2010-09-30 126 views
3

親愛的所有人,我試圖用關聯的顏色欄執行帶顏色的散點圖。我希望顏色條具有字符串值而不是數值,因爲我比較了兩個不同的數據集,每個數據集具有不同的顏色值(但是在任何情況下都在最大值和最小值之間)。這裏我正在使用的代碼matplotlib 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() 

不幸的是,它不起作用,因爲cbar.set_ticks不接受字符串值。我已閱讀ling http://matplotlib.sourceforge.net/examples/pylab_examples/colorbar_tick_labelling_demo.html但我無法將其適應我的情況。我很抱歉,如果問題很簡單,但我只是在編程 尼古拉開始。

回答

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

例如,

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

產生

alt text