2014-04-24 13 views
6

मैं एक 3 डी सतह, एक रंग बार के साथकलरबार में NaN को अनदेखा कैसे करें?

surf = ax.plot_surface(xv, yv, zv, ...) 
cb = fig.colorbar(surf) 

जब यह काम करता है के द्वारा उत्पन्न किया जा रहा है, यह इस तरह दिखता है:

enter image description here

समस्या यह है कि मूल्यों के कुछ NaN, जिस स्थिति में colorbar उत्पन्न करने के लिए विफल रहता है, इस तरह हो सकता है:

Example

C:\Users\Sam\Anaconda\lib\site-packages\matplotlib\colorbar.py:581: RuntimeWarning: invalid value encountered in greater 
    inrange = (ticks > -0.001) & (ticks < 1.001) 
C:\Users\Sam\Anaconda\lib\site-packages\matplotlib\colorbar.py:581: RuntimeWarning: invalid value encountered in less 
    inrange = (ticks > -0.001) & (ticks < 1.001) 
C:\Users\Sam\Anaconda\lib\site-packages\matplotlib\colors.py:576: RuntimeWarning: invalid value encountered in less 
    cbook._putmask(xa, xa < 0.0, -1) 

मैं 0 (zv[isnan(zv)] = 0) के साथ zv के NaN मानों को प्रतिस्थापित करने का प्रयास कर सकता हूं, लेकिन उसके बाद परिणामी ग्राफ में लंबवत चट्टान हैं, जो कुछ सुविधाओं को भ्रमित और अस्पष्ट कर रहे हैं, और यह कलर बार को स्कूज करता है।

enter image description here

क्या मैं चाहता हूँ NaN मूल्यों की अनदेखी करने के रंग बार के लिए एक तरीका है। ऐसा करने के लिए मैं मैन्युअल रूप से कलर बार (amin(zv[~isnan(zv)]) और amax(zv[~isnan(zv)])) सेट करने के बाद मैन्युअल रूप से सेट कर सकता हूं, लेकिन मुझे नहीं पता कि यह कैसे करें।

कलरबार की गणना करते समय और 3 डी सतह रंगते समय NaNs को अनदेखा करने के तरीके पर कोई सुझाव?

उत्तर

8

vmin और vmax पैरामीटर को plot_surface पर कॉल में पैरामीटर सेट करें। ये मान कलरबार द्वारा मैप किए गए न्यूनतम और अधिकतम मानों को प्रभावित करते हैं।

import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.axes3d as axes3d 

def peaks(x, y): 
    return x*np.sin(y) 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 
X, Y = np.meshgrid(np.linspace(-3, 3, 100), np.linspace(-3, 3, 100)) 

Z = peaks(X, Y) 
Z[X+Y>3] = np.nan 

surf = ax.plot_surface(X, Y, Z, alpha=0.3, cmap=plt.cm.jet, 
         vmin=np.nanmin(Z), vmax=np.nanmax(Z)) 
cbar = plt.colorbar(surf) 

plt.show() 

enter image description here

-1

आप सर्फ से पहले ZV से NaN बाहर करने के लिए है, तो तरह सक्षम होना चाहिए:

surf = ax.plot_surface(xv, yv, zv[~isnan(zv)], ...) 
cb = fig.colorbar(surf) 

इस तरफ कदम चाहिए समस्या पूरी तरह से, अगर मैं इसे सही ढंग से समझते हैं। बेशक, मैं उलझन में हो सकता है। शुभ लाभ।

+2

कि ZV समतल होगा। zv एक 2 डी सरणी होना चाहिए। – charmoniumQ

संबंधित मुद्दे