2017-02-22 5 views
1

matlotlibのcontourとcontourf関数を使って2つの変数の関数をvizualizeしようとしています。同じデータを使用すると、輪郭は完全には機能しますが、輪郭線fは欠陥のある画像を生成します。その理由は何ですか?matplotlib contourは同じデータセットでcontourfが失敗している間に働く

from numpy import exp, pi 
import numpy as np 

# function to be plotted 
def R(n0,n1,y,d): 
    r01 = -(n1-n0+y)/(n0+n1+y) 
    t01 = 2*n0/(n0+n1+y) 
    t10 = 2*n1/(n0+n1+y) 
    r10 = -(n0-n1+y)/(n0+n1+y) 
    return abs(r01 - t01*t10*exp(4j*pi*d)/(1+r10*exp(4j*pi*d)))**2.0 

# meshgrid for plotting 
xlist = np.linspace(0.0, 0.5, 101) 
ylist = np.linspace(0.0, 6.0, 101) 
X, Y = np.meshgrid(xlist, ylist) 

# function values on the meshgrid 
Z = [] 
for y in ylist: 
    zslice = [] 
    for d in xlist: 
     zslice.append(R(1.0,2.0,y,d)) 
    Z.append(zslice) 

# plot ------------------------------------- 
import matplotlib.pyplot as plt 
plt.figure() 
levels = [0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] 
cp = plt.contour(X, Y, Z, levels) # works 
cp = plt.contourf(X, Y, Z, levels) # fails=provides defective image 
plt.colorbar(cp) 
plt.clabel(cp, inline=True, fontsize=10) 
plt.show() 

答えて

0

あなたはcontourfにラベルを設定しています。ただし、contourに設定する必要があります。

import matplotlib.pyplot as plt 
plt.figure() 
levels = [0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] 
cp2 = plt.contour(X, Y, Z, levels) 
cp = plt.contourf(X, Y, Z, levels) 
plt.colorbar(cp) 
plt.clabel(cp2, inline=True, fontsize=10) 
plt.show() 

根本的なロジックは完全に明らかではないが、これは奇妙なcontourf行動の問題を解決します。

関連する問題