आप अपने तितर बितर के लिए normalizer के रूप में एक बाउंडरीऑर्म का उपयोग करके एक कस्टम असतत colorbar काफी आसानी से बना सकते हैं। विचित्र बिट (मेरी विधि में) 0 शोअप को ग्रे बना रहा है।
छवियों के लिए मैं अक्सर cmap.set_bad () का उपयोग करता हूं और अपने डेटा को एक सुस्पष्ट नकाबपोश सरणी में परिवर्तित करता हूं। यह 0 ग्रे बनाने के लिए बहुत आसान होगा, लेकिन मैं इस बिखराव या कस्टम cmap के साथ काम करने के लिए नहीं मिल सका।
एक विकल्प के रूप में आप अपने स्वयं के cmap को खरोंच से बना सकते हैं, या किसी मौजूदा को पढ़ सकते हैं और कुछ विशिष्ट प्रविष्टियों को ओवरराइड कर सकते हैं।
import numpy as np
import matplotlib as mpl
import matplotlib.pylab as plt
fig, ax = plt.subplots(1, 1, figsize=(6, 6)) # setup the plot
x = np.random.rand(20) # define the data
y = np.random.rand(20) # define the data
tag = np.random.randint(0, 20, 20)
tag[10:12] = 0 # make sure there are some 0 values to show up as grey
cmap = plt.cm.jet # define the colormap
# extract all colors from the .jet map
cmaplist = [cmap(i) for i in range(cmap.N)]
# force the first color entry to be grey
cmaplist[0] = (.5, .5, .5, 1.0)
# create the new map
cmap = mpl.colors.LinearSegmentedColormap.from_list(
'Custom cmap', cmaplist, cmap.N)
# define the bins and normalize
bounds = np.linspace(0, 20, 21)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
# make the scatter
scat = ax.scatter(x, y, c=tag, s=np.random.randint(100, 500, 20),
cmap=cmap, norm=norm)
# create a second axes for the colorbar
ax2 = fig.add_axes([0.95, 0.1, 0.03, 0.8])
cb = plt.colorbar.ColorbarBase(ax2, cmap=cmap, norm=norm,
spacing='proportional', ticks=bounds, boundaries=bounds, format='%1i')
ax.set_title('Well defined discrete colors')
ax2.set_ylabel('Very custom cbar [-]', size=12)
मुझे व्यक्तिगत रूप से लगता है कि 20 अलग-अलग रंगों के साथ विशिष्ट मूल्य को पढ़ने के लिए थोड़ा कठिन है, लेकिन निश्चित रूप से आपके ऊपर।