2013-02-28 6 views
9

में रंगीन वायरफ्रेम प्लॉट मैं z-value के अनुसार वायरफ़्रेम प्लॉट रंग देने की कोशिश कर रहा हूं। मुझे इंटरनेट पर कोई कोड उदाहरण नहीं मिल रहा है।matplotlib

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
import matplotlib.pyplot as plt 

# some numbers for the data 
P=12000 #W 
Q=1  #kg/s 
DT=3 #K 
cp=4169.32 #J/kgK 

dDT=np.logspace(-2,0,20,endpoint=True) 
dQ=Q*np.logspace(-3,-1,20,endpoint=True) 

# the plotting data 
m1,m2=np.meshgrid(dDT,dQ) 
err=cp*np.sqrt((m1*Q)**2+(m2*DT)**2)/P 

# the wiremesh plot that i need fixed 
fig=plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_wireframe(m1, m2, err, color=err/err.max(),cmap='jet') 
ax.set_xlabel('dDT') 
ax.set_ylabel('DQ') 
ax.set_zlabel('relative error') 

# the surface plot that has the colors i want 
fig = plt.figure() 
ax = fig.gca(projection='3d') 

surf = ax.plot_surface(m1, m2, err,rstride=1, cstride=1, cmap=cm.jet, 
    linewidth=0.1, antialiased=False) 

fig.colorbar(surf, shrink=0.5, aspect=5) 

ax.set_xlabel('dDT') 
ax.set_ylabel('DQ') 
ax.set_zlabel('relative error') 
plt.show() 

किसी भी मदद के लिए धन्यवाद:

यहाँ एक सतह साजिश रंग मैं चाहता हूँ और एक wireframe भूखंड जहाँ मैं तर्ज पर रंग प्राप्त करने के लिए प्रबंधन नहीं कर सकते है कि का एक उदाहरण है!

+0

http://stackoverflow.com/questions/24909256/how-to-obtain-3d-colored-surface-via-python/24958192#24958192 की संभावित डुप्लिकेट? – GBy

उत्तर

6

जब आप plot_wireframe का उपयोग करें, प्रत्येक पंक्ति में केवल एक रंग हो सकता है। इसके बजाय, आप plot_surface का उपयोग कर सकते हैं। किनारे रंग सेट करने के लिए plot_surface प्राप्त करने के लिए, आपको इसे फेसकलर देना होगा। फिर आप चेहरा रंगों के अल्फा को शून्य पर सेट कर सकते हैं।

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 
from matplotlib import cm 

X, Y, Z = axes3d.get_test_data(0.2) 

# Normalize to [0,1] 
Z = (Z-Z.min())/(Z.max()-Z.min()) 

colors = cm.viridis(Z) 
rcount, ccount, _ = colors.shape 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
surf = ax.plot_surface(X, Y, Z, rcount=rcount, ccount=ccount, 
         facecolors=colors, shade=False) 
surf.set_facecolor((0,0,0,0)) 
plt.show() 

z color wireframe

1

मुझे एक वैरिएबल के अनुसार रंग और आकार देने वाली मंडलियों के साथ एक ही समस्या थी जो या तो काम नहीं करता था। तो मेरा कामकाज डिब्बे पर चर और लूप के मूल्यों को बिन करना था। मैंने डेटा को मुखौटा किया कि सरणी mask में केवल उस बिन में मान वाले डेटा शामिल थे।

ax.plot_wireframe(mask[i], ..., color="red") 
ax.plot_wireframe(mask[i], ..., color="blue") 
etc. 

मैं जानता हूँ कि यह बहुत ही सुंदर नहीं है, लेकिन मेरे मामले में यह काम किया है;)

+0

क्षमा करें मुझे वह नहीं मिला। क्या आप एक कोड उदाहरण पोस्ट कर सकते हैं? – user1805743

1

हो सकता है कि आप के बजाय plot_surface उपयोग करने की आवश्यकता?

import matplotlib.pylab as plt 
from matplotlib import cm 
from mpl_toolkits.mplot3d import Axes3D 

fig = plt.figure(figsize=(8, 8)) 
ax = fig.gca(projection='3d') 

t = np.linspace(-3, 2, 31) 
s = np.linspace(-3, 2, 31) 

T, S = np.meshgrid(t, s) 

ax.plot_surface(T * T, sqrt2 * T * S, S * S, cmap=cm.jet, rstride=1, cstride=1) 

ax.set_xlabel('$t^2$') 
ax.set_ylabel('$\sqrt{2} s t$') 
ax.set_zlabel('$s^2$') 

ax.set_title('line $s = t$ in $\cal F$') 

plt.show() 

enter image description here