सबसे पहले, ऐसा करने के एक से अधिक तरीके हैं।
contourf
करने के लिए colors
kwarg का प्रयोग करें और मैन्युअल रूप से रंग
- उपयोग एक कस्टम
Normalize
वर्ग निर्दिष्ट करें और norm
kwarg के रूप में एक उदाहरण गुजरती हैं।
matplotlib.colors.from_levels_and_colors
के साथ निर्मित एक अलग रंगरूप का उपयोग करें।
colors=sequence_of_colors
के साथ विशिष्ट रंगों में पारित करने का सबसे आसान तरीका है। हालांकि, यदि आप मैन्युअल रूप से समरूपता की संख्या निर्धारित नहीं कर रहे हैं, तो यह असुविधाजनक हो सकता है।
सबसे सुविधाजनक तरीका दूसरा विकल्प है: कस्टम सामान्यीकरण निर्दिष्ट करने के लिए norm
kwarg का उपयोग करें। आप जो चाहते हैं उसके लिए, आपको Normalize
उप-वर्ग करना होगा, लेकिन ऐसा करना मुश्किल नहीं है। यह एकमात्र विकल्प है जो आपको निरंतर रंगरूप का उपयोग करने की अनुमति देता है।
दूसरे या तीसरे विकल्पों का उपयोग करने का कारण यह है कि वे किसी भी प्रकार की matplotlib साजिश के लिए काम करेंगे जो एक colormap (उदा। imshow
, scatter
, आदि) का उपयोग करता है।
तीसरा विकल्प विशिष्ट रंगों से एक अलग रंगरूप और सामान्यीकरण वस्तु बनाता है। यह मूल रूप से पहले विकल्प के समान है, लेकिन यह ए) समोच्च भूखंडों की तुलना में अन्य प्रकार के भूखंडों के साथ काम करेगा, और बी) मैन्युअल रूप से समोच्चों की संख्या निर्दिष्ट करने से बचाता है।
दूसरा विकल्प का एक उदाहरण के रूप में (मैं imshow
यहां इस्तेमाल करेंगे, क्योंकि यह यादृच्छिक डेटा के लिए contourf
की तुलना में अधिक समझ में आता है, लेकिन contourf
interpolation
विकल्प के अलावा अन्य समान उपयोग करना होगा।):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
class MidpointNormalize(Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
data = np.random.random((10,10))
data = 10 * (data - 0.8)
fig, ax = plt.subplots()
norm = MidpointNormalize(midpoint=0)
im = ax.imshow(data, norm=norm, cmap=plt.cm.seismic, interpolation='none')
fig.colorbar(im)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import from_levels_and_colors
data = np.random.random((10,10))
data = 10 * (data - 0.8)
num_levels = 20
vmin, vmax = data.min(), data.max()
midpoint = 0
levels = np.linspace(vmin, vmax, num_levels)
midp = np.mean(np.c_[levels[:-1], levels[1:]], axis=1)
vals = np.interp(midp, [vmin, midpoint, vmax], [0, 0.5, 1])
colors = plt.cm.seismic(vals)
cmap, norm = from_levels_and_colors(levels, colors)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=cmap, norm=norm, interpolation='none')
fig.colorbar(im)
plt.show()
:
तीसरे विकल्प का एक उदाहरण के रूप में (सूचना इस एक सतत रंग मैप के बजाय एक असतत रंग मैप देता है कि)
अद्भुत, यह वही था जो मैं ढूंढ रहा था, धन्यवाद! – pgierz
Matplotlib – Moritz
@ जो किंगटन में जोड़ा जाना चाहिए, जो वाकई बहुत अच्छा था! मैं एक ओपन-सोर्स प्रोजेक्ट के लिए अपनी कक्षा परिभाषा की प्रतिलिपि बना रहा हूं और अपना नाम लेखक के रूप में रखता हूं। आशा है कि आप इसके साथ ठीक रहेगा। –