[python] Matplotlib रंग पट्टी टिक ठीक करना


0 Answers

आप प्लेसमेंट और हाथ से लेबल नियंत्रित कर सकते हैं। मैं आपके द्वारा लिंक किए गए पृष्ठ पर cmap_discretize से उत्पन्न एक रैखिक सेमीमेट से शुरू cmap_discretize :

import numpy as np
import pylab as plt

# The number of divisions of the cmap we have
k = 10

# Random test data
A = np.random.random((10,10))*k
c = cmap_discretize('jet', k)

# First show without
plt.subplot(121)
plt.imshow(A,interpolation='nearest',cmap=c)
plt.colorbar()

# Now label properly
plt.subplot(122)
plt.imshow(A,interpolation='nearest',cmap=c)

cb = plt.colorbar()
labels = np.arange(0,k,1)
loc    = labels + .5
cb.set_ticks(loc)
cb.set_ticklabels(labels)

plt.show()

Question

मैंने एक छोटी-छोटी नक्शा के साथ एक रंग बार रखा है चूंकि प्लॉट किए जा रहे डेटा निरंतर मानों के बजाय असतत हैं, मैंने एक रैयनियर सेगेंडेड कोलॉर्मैप का प्रयोग किया है (स्पीपी रसोई की किताब से नुस्खा का उपयोग करके), जो मैंने अपने अधिकतम गिने मान के साथ आरंभ किया है + 1, ताकि 0 के लिए रंग दिखाने के लिए हालांकि, अब मुझे दो समस्याएं हैं:

  1. टिक लेबल गलत तरीके से (5, अधिक या कम छोड़कर) स्थान पर हैं - उन्हें वे रंग के मध्य में स्थित होना चाहिए; यानी 0-4 को स्थानांतरित किया जाना चाहिए, और 6-10 को नीचे ले जाया जाना चाहिए।

  2. अगर मैं drawedges=True साथ drawedges=True को drawedges=True करता हूँ, ताकि मैं इसके dividers गुणों को स्टाइल कर drawedges=True , मुझे यह मिलता है:

मैं अपने colormap और colorbar बना रहा हूँ जैसे:

cbmin, cbmax = min(counts), max(counts)
# this normalises the counts to a 0,1 interval
counts /= np.max(np.abs(counts), axis=0)
# density is a discrete number, so we have to use a discrete color ramp/bar
cm = cmap_discretize(plt.get_cmap('YlGnBu'), int(cbmax) + 1)
mappable = plt.cm.ScalarMappable(cmap=cm)
mappable.set_array(counts)
# set min and max values for the colour bar ticks
mappable.set_clim(cbmin, cbmax)
pc = PatchCollection(patches, match_original=True)
# impose our colour map onto the patch collection
pc.set_facecolor(cm(counts))
ax.add_collection(pc,)
cb = plt.colorbar(mappable, drawedges=True)

इसलिए मैं सोच रहा हूं कि क्या 0,1 अंतराल के लिए गणनाओं को परिवर्तित करना एक समस्या है।

अद्यतन करें :

हुक के सुझाव की कोशिश करने के बाद, 0-मान सही है, लेकिन बाद के मूल्यों को क्रमशः उच्च निर्धारित किया जाता है, इस बिंदु पर 9 जहां 10 होना चाहिए:

यहां मैंने उपयोग किया हुआ कोड है:

cb = plt.colorbar(mappable)
labels = np.arange(0, int(cbmax) + 1, 1)
loc = labels + .5
cb.set_ticks(loc)
cb.set_ticklabels(labels)

और सिर्फ यह पुष्टि करने के लिए, labels निश्चित रूप से सही मान हैं:

In [3]: np.arange(0, int(cbmax) + 1, 1)
Out[3]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])





Related