matplotlib: colorbars और इसके पाठ लेबल


108

मैं एक के लिए एक colorbarकिंवदंती बनाना चाहता हूं heatmap, जैसे कि लेबल प्रत्येक असतत रंग के केंद्र में हैं। यहाँ से उधार लिया गया उदाहरण :

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap

#discrete color scheme
cMap = ListedColormap(['white', 'green', 'blue','red'])

#data
np.random.seed(42)
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=cMap)

#legend
cbar = plt.colorbar(heatmap)
cbar.ax.set_yticklabels(['0','1','2','>3'])
cbar.set_label('# of contacts', rotation=270)

# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False)
ax.invert_yaxis()

#labels
column_labels = list('ABCD')
row_labels = list('WXYZ')
ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)

plt.show()

यह निम्नलिखित कथानक उत्पन्न करता है:

दोपहर का प्लॉट

आदर्श रूप से मैं एक लेजेंड बार बनाना चाहूंगा जिसमें चार रंग हों और प्रत्येक रंग के लिए, इसके केंद्र में एक लेबल 0,1,2,>3:। यह कैसे हासिल किया जा सकता है?

जवाबों:


116
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap

#discrete color scheme
cMap = ListedColormap(['white', 'green', 'blue','red'])

#data
np.random.seed(42)
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=cMap)

#legend
cbar = plt.colorbar(heatmap)

cbar.ax.get_yaxis().set_ticks([])
for j, lab in enumerate(['$0$','$1$','$2$','$>3$']):
    cbar.ax.text(.5, (2 * j + 1) / 8.0, lab, ha='center', va='center')
cbar.ax.get_yaxis().labelpad = 15
cbar.ax.set_ylabel('# of contacts', rotation=270)


# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False)
ax.invert_yaxis()

#labels
column_labels = list('ABCD')
row_labels = list('WXYZ')
ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)

plt.show()

आप बहुत करीब थे। एक बार जब आपके पास रंग बार अक्ष का संदर्भ होता है, तो आप वह कर सकते हैं जो आप कभी भी चाहते हैं, जिसमें बीच में पाठ लेबल डालना भी शामिल है। आप इसे अधिक दृश्यमान बनाने के लिए प्रारूपण के साथ खेलना चाह सकते हैं।

डेमो


6

टैक्स्वेल के उत्तर में जोड़ने के लिए , colorbar()फ़ंक्शन में एक वैकल्पिक caxइनपुट है जिसका उपयोग आप एक अक्ष को पारित करने के लिए कर सकते हैं , जिस पर रंगीन पट्टी खींची जानी चाहिए। यदि आप उस इनपुट का उपयोग कर रहे हैं, तो आप सीधे उस अक्ष का उपयोग करके एक लेबल सेट कर सकते हैं।

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

fig, ax = plt.subplots()
heatmap = ax.imshow(data)
divider = make_axes_locatable(ax)
cax = divider.append_axes('bottom', size='10%', pad=0.6)
cb = fig.colorbar(heatmap, cax=cax, orientation='horizontal')

cax.set_xlabel('data label')  # cax == cb.ax

1
मुझे लगता है कि इसके axes_grid1बजाय होना चाहिए axes.grid1
आरवीएफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.