2017-09-27 75 views
2

我想知道如果任何人有任何想法如何掩饰或隐藏在Python中的等值线图的特定区域,这里是我的代码的一部分掩盖轮廓图中的特定区域?

self.fig=plt.figure() 
    delta = 0.025 
    xmin=4 
    xmin=6 
    x=np.arange(4,6,delta) 
    ymin=85 
    ymax=91 
    y = np.arange(85, 91, delta) 
    X, Y = np.meshgrid(x, y) 
    Z=formel()//here im using a specific formula to calculate Z 
    plt.gcf().subplots_adjust(left=0.16) 
    plt.xlabel(xlabel) 
    plt.ylabel(ylabel) 
    self.CS = plt.contour(X, Y, Z) 
    plt.xlim(xmin, xmax) 
    plt.ylim(ymin, ymax) 
    plt.plot(pointX, pointY, 'kx') 
    plt.clabel(self.CS, inline=1, fontsize=10) 
    self.canvas = FigureCanvasTkAgg(self.fig, self) 
    self.canvas.get_tk_widget().config(width=400,height=400)` 

这里是我多么想掩盖的区域 enter image description here 感谢你们

+1

请调整你的问题有一个MCVE作为目前的代码片段将无法运行,因为颇有些东西不见了(例如'formel','x','y'和'delta')。 –

+0

我编辑了这个问题,但我没有写formel因为它很长,在这里没有任何意义。希望这是你要求编辑问题时的意思。 – Zitrone

回答

1

你可以使用PathPatch过顶,以显示你的面具如下:

import numpy as np 
import matplotlib.patches as mpatches 
import matplotlib.pyplot as plt 
import matplotlib.path as mpath 

ax = plt.gca() 

x = np.linspace(0.04, 0.06, 100) 
y = np.random.random(100) * [0.91 - 0.85] + 0.85 

top, right, bottom, left = y.max(), x.max(), y.min(), x.min() 
mask_height = (top - bottom) * 0.4  # 40% mask coverage 

plt.plot(x, y, zorder=1) 

ax.set_xlim(left, right) 
ax.set_ylim(bottom, top) 

path_data = [ 
    (mpath.Path.MOVETO, (left, bottom)), 
    (mpath.Path.LINETO, (right, bottom)), 
    (mpath.Path.LINETO, (left, mask_height + bottom)), 
    (mpath.Path.CLOSEPOLY, (0,0)), 

    (mpath.Path.MOVETO, (right , top)), 
    (mpath.Path.LINETO, (right, top - mask_height)), 
    (mpath.Path.LINETO, (left, top)), 
    (mpath.Path.CLOSEPOLY, (0, 0)), 
    ] 

codes, verts = zip(*path_data) 
path = mpath.Path(verts, codes) 
patch = mpatches.PathPatch(path, facecolor=(0.8, 0.8, 0.8), lw=2, ec=(0.8, 0.8, 0.8), zorder=2)#, alpha=0.5) 
ax.add_patch(patch) 
plt.show() 

这将使你somethi吴象:

plot with mask

+0

谢谢你的建议,我会去试一试。 – Zitrone

+0

我已经更新它来根据数据自动计算'path_data'。 –

+0

嗨,我收到一个错误,说'int'对象不可调用 – Zitrone