matplotlib
Colormaps
खोज…
मूल उपयोग
बिल्ट-इन कॉलोर्मैप्स का उपयोग करना उतना ही सरल है जितना कि आवश्यक pcolormesh
( pcolormesh
रेफरेंस में दिए गए) को प्लॉटिंग फ़ंक्शन (जैसे कि pcolormesh
या contourf
) के रूप में pcolormesh
जो इसे उम्मीद करता है, आमतौर पर एक cmap
कीवर्ड तर्क के रूप में:
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
plt.pcolormesh(np.random.rand(20,20),cmap='hot')
plt.show()
दो-आयामी भूखंडों पर तीन-आयामी डेटा की कल्पना करने के लिए कोलोरैप विशेष रूप से उपयोगी होते हैं, लेकिन एक अच्छा कॉलॉर्मैप एक उचित तीन-आयामी भूखंड को बहुत अधिक स्पष्ट कर सकता है:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator
# generate example data
import numpy as np
x,y = np.meshgrid(np.linspace(-1,1,15),np.linspace(-1,1,15))
z = np.cos(x*np.pi)*np.sin(y*np.pi)
# actual plotting example
fig = plt.figure()
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(x,y,z,rstride=1,cstride=1,cmap='viridis')
ax2 = fig.add_subplot(122)
cf = ax2.contourf(x,y,z,51,vmin=-1,vmax=1,cmap='viridis')
cbar = fig.colorbar(cf)
cbar.locator = LinearLocator(numticks=11)
cbar.update_ticks()
for ax in {ax1, ax2}:
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_aspect('equal')
ax1.set_zlim([-1,1])
ax1.set_zlabel(r'$\cos(\pi x) \sin(\p i y)$')
plt.show()
कस्टम कॉलॉर्मैप्स का उपयोग करना
'_r'
संदर्भ (और उनके उल्टे नक्शे, उनके नाम के साथ संलग्न) के साथ, निर्मित '_r'
, कस्टम कॉलॉर्मैप को भी परिभाषित किया जा सकता है। कुंजी matplotlib.cm
मॉड्यूल है।
नीचे दिए गए उदाहरण cm.register_cmap
का उपयोग करके एक बहुत ही सरल cm.register_cmap
को परिभाषित करता है, जिसमें एक ही रंग होता है, डेटा रेंज में पूरी तरह से अपारदर्शी और पूरी तरह से पारदर्शी के बीच रंग की अस्पष्टता (अल्फा मान) के साथ। ध्यान दें कि plot_surface
के दृष्टिकोण से महत्वपूर्ण लाइनें cm
का आयात, register_cmap
लिए कॉल, और plot_surface
से plot_surface
को plot_surface
।
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.cm as cm
# generate data for sphere
from numpy import pi,meshgrid,linspace,sin,cos
th,ph = meshgrid(linspace(0,pi,25),linspace(0,2*pi,51))
x,y,z = sin(th)*cos(ph),sin(th)*sin(ph),cos(th)
# define custom colormap with fixed colour and alpha gradient
# use simple linear interpolation in the entire scale
cm.register_cmap(name='alpha_gradient',
data={'red': [(0.,0,0),
(1.,0,0)],
'green': [(0.,0.6,0.6),
(1.,0.6,0.6)],
'blue': [(0.,0.4,0.4),
(1.,0.4,0.4)],
'alpha': [(0.,1,1),
(1.,0,0)]})
# plot sphere with custom colormap; constrain mapping to between |z|=0.7 for enhanced effect
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x,y,z,cmap='alpha_gradient',vmin=-0.7,vmax=0.7,rstride=1,cstride=1,linewidth=0.5,edgecolor='b')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect('equal')
plt.show()
अधिक जटिल परिदृश्यों में, व्यक्ति R / G / B (/ A) मूल्यों की एक सूची को परिभाषित कर सकता है जिसमें matplotlib संबंधित भूखंडों में प्रयुक्त रंगों को निर्धारित करने के लिए रैखिक रूप से प्रक्षेपित करता है।
अवधारणात्मक रूप से समान कॉलोर्मैप
MATLAB (संस्करण R2014b में प्रतिस्थापित) का मूल डिफ़ॉल्ट कोलोरमैप jet
कहलाता है, जो इसके उच्च विपरीत और परिचित होने के कारण सर्वव्यापी है (और अनुकूलता कारणों के लिए matplotlib का डिफ़ॉल्ट था)। अपनी लोकप्रियता के बावजूद, पारंपरिक कॉलोर्मैप में अक्सर कमियां होती हैं, जब डेटा का सही प्रतिनिधित्व करने की बात आती है। इन कॉलोर्मैप में परिकृत परिवर्तन डेटा में परिवर्तन के अनुरूप नहीं है; और colormap का greyscale में रूपांतरण (उदाहरण के लिए, काले और सफेद प्रिंटर का उपयोग करके किसी आकृति को प्रिंट करना) से जानकारी का नुकसान हो सकता है।
डेटा विज़ुअलाइज़ेशन को यथासंभव सटीक और सुलभ बनाने के लिए अवधारणात्मक रूप से समान कॉलॉर्मैप पेश किए गए हैं। Matplotlib ने संस्करण 1.5 में चार नए, अवधारणात्मक रूप से समान कॉलोर्मैप पेश किए , जिनमें से एक का नाम ( viridis
) संस्करण 2.0 से डिफ़ॉल्ट होना चाहिए। ये चार कोलोराप्स ( viridis
, inferno
, plasma
और magma
) धारणा के दृष्टिकोण से सभी इष्टतम हैं, और इन्हें डिफ़ॉल्ट रूप से डेटा विज़ुअलाइज़ेशन के लिए उपयोग किया जाना चाहिए जब तक कि ऐसा करने के लिए बहुत अच्छे कारण न हों। ये कॉलोर्मैप्स संभव के रूप में बहुत कम पूर्वाग्रह का परिचय देते हैं (उन विशेषताओं को न बनाकर जहां से शुरू करने के लिए कोई भी नहीं है), और वे कम रंग धारणा वाले दर्शकों के लिए उपयुक्त हैं।
नेत्रहीन विकृत डेटा के लिए एक उदाहरण के रूप में, पिरामिड जैसी वस्तुओं के निम्नलिखित दो शीर्ष-दृश्य भूखंडों पर विचार करें:
दोनों में से कौन सा एक उचित पिरामिड है? उत्तर यह है कि दोनों हैं, लेकिन यह jet
कॉलॉर्मैप का उपयोग करते हुए साजिश से स्पष्ट रूप से दूर है:
यह सुविधा अवधारणात्मक एकरूपता के मूल में है।
कस्टम असतत colormap
यदि आपके पास पूर्वनिर्धारित श्रेणियां हैं और उन श्रेणियों के लिए विशिष्ट रंगों का उपयोग करना चाहते हैं, तो आप कस्टम कॉलॉर्मैप घोषित कर सकते हैं। उदाहरण के लिए:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors
x = np.linspace(-2,2,500)
y = np.linspace(-2,2,500)
XX, YY = np.meshgrid(x, y)
Z = np.sin(XX) * np.cos(YY)
cmap = colors.ListedColormap(['red', '#000000','#444444', '#666666', '#ffffff', 'blue', 'orange'])
boundaries = [-1, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 1]
norm = colors.BoundaryNorm(boundaries, cmap.N, clip=True)
plt.pcolormesh(x,y,Z, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
का उत्पादन
रंग I का उपयोग सीमा i और i + 1 के बीच के मूल्यों के लिए किया जाएगा। रंगों को नाम ( 'red'
, 'green'
), एचटीएमएल कोड ( '#ffaa44'
, '#441188'
) या RGB '#441188'
( (0.2, 0.9, 0.45)
) द्वारा निर्दिष्ट किया जा सकता है।