2016-04-08 16 views
2

Baz haritadaki kontur çizgilerini çizmek için bazı meteorolojik veriler üzerinde çalışıyorum. Daha önce yaptığım tam çalışma örneği kodu burada How to remove/omit smaller contour lines using matplotlib. Tüm işler iyi ve ben kontur komplo ile şikayet etmiyorum. Bununla birlikte, belirli bir bölge üzerindeki tüm kontur hatlarını bir ana harita üzerinde (düzensiz lat & lon) gizlemek zorunda olduğum özel bir durum söz konusudur.Basemap üzerindeki belirli bir alandan kontur çizgileri/verileri nasıl gizlenir

Düşünebildiğim tek olası çözüm, istenen bölgeye bir ploygon çizgisi çizmek ve Basemap ile aynı rengi doldurmaktır. Aramanın sürü sonra ben kısmen iş gibi görünüyor bu linki How to draw rectangles on a Basemap (aşağıdaki kodu)

from mpl_toolkits.basemap import Basemap 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 

def draw_screen_poly(lats, lons, m): 
    x, y = m(lons, lats) 
    xy = zip(x,y) 
    poly = Polygon(xy, facecolor='red', alpha=0.4) 
    plt.gca().add_patch(poly) 

lats = [ -30, 30, 30, -30 ] 
lons = [ -50, -50, 50, 50 ] 

m = Basemap(projection='sinu',lon_0=0) 
m.drawcoastlines() 
m.drawmapboundary() 
draw_screen_poly(lats, lons, m) 

plt.show() 

bulundu. Ancak, düzensiz bir bölge çizmek istiyorum.

Herhangi bir çözüm için teşekkür ederiz.

Düzenleme: sorun olduğu 1

ben anlamış. Poligon bölgesi içinde doldurulan herhangi bir rengin (yüz rengi), onu aşağıda herhangi bir şeyi gizlemediği görülüyor. Her zaman sadece şeffaftır, kullanılan alpha değerinden bağımsız olarak. Sorunu açıklamak için, üç bölgeye sahip olan görüntüyü kırptım. çevre, bölge bölgesi ve çokgen bölgesi. Poligon bölgesi kırmızı renkle doldurulur, ancak görebildiğiniz gibi, kontur çizgileri daima görünürdür. Yukarıdaki kodda kullanmış olduğum satır şu şekildedir: -

poly = Polygon(xy, facecolor='red', edgecolor='b') 

Bu nedenle sorun yukarıdaki kodla ilgili değildir. Poligon dolgusuyla problem gibi görünüyor. Ama yine de bu sorun için bir çözüm yok. Ortaya çıkan görüntü (Kırpılmış resim) (ekli görüntünün altında benim 2 düzenlemeyi bakınız) aşağıda verilmiştir: -

enter image description here

Düzenleme 2: madenin benzer gereksinimi vardır bu http://matplotlib.1069221.n5.nabble.com/Clipping-a-plot-inside-a-polygon-td41950.html den çıkarak ipucu Bazı verileri kaldırabilirim. Ancak, kaldırılan veriler, yalnızca bunun yerine çokgen bölgesinin dışından gelir. İşte gelen ipucu kodu almış olduğu: - Şimdi

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import RegularPolygon 

data = np.arange(100).reshape(10, 10) 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.contourf(data) 
poly = RegularPolygon([ 0.5, 0.5], 6, 0.4, fc='none', 
         ec='k', transform=ax.transAxes) 
for artist in ax.get_children(): 
    artist.set_clip_path(poly) 

benim soru ne komut o poligon bölge içinde verilerin çıkarılması için kullanılır mı?

+0

teslim bir çokgen dorukların çalışmıyor? – tacaswell

+0

Gecikme için özür dilerim. Tüm lat ve lonları sağladıktan sonra çalışır. Ancak kullandığım taban haritası rengi beyaz/renksiz. Verdiğim zaman poligon rengini 'beyaz' olarak kullanarak bu komutu kullanarak 'poly = Polygon (xy, facecolor = 'white')' sonra arkasındaki veri/kontur çizgilerini gizlemez. Temel olarak 'beyaz' rengi şeffaftır. Kod çalışır, ancak sorun şu anda renkle. –

+0

Ekran resmimle sorumu güncelledim. –

cevap

2

Bunun üzerinde bir hak iddia edildiğini fark etmedim, bu yüzden zaten önerilen çözümü here verebilirim. Eğer poligon arkasında şeyler gizlemek için ZOrder ile tamircilik olabilir:

import matplotlib 
import matplotlib.mlab as mlab 
import matplotlib.pyplot as plt 

matplotlib.rcParams['xtick.direction'] = 'out' 
matplotlib.rcParams['ytick.direction'] = 'out' 

delta = 0.025 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) 
# difference of Gaussians 
Z = 10.0 * (Z2 - Z1) 


# Create a simple contour plot with labels using default colors. The 
# inline argument to clabel will control whether the labels are draw 
# over the line segments of the contour, removing the lines beneath 
# the label 
fig = plt.figure() 
ax = fig.add_subplot(111) 
CS = plt.contour(X, Y, Z,zorder=3) 
plt.clabel(CS, inline=1, fontsize=10) 
plt.title('Simplest default with labels') 

rect1 = matplotlib.patches.Rectangle((0,0), 2, 1, color='white',zorder=5) 

ax.add_patch(rect1) 

plt.show() 

, sonucudur: lats/Lons

Hiding contour line with polygon

+0

Bu iş parçacığına yanıt olmadığından yeni bir iş parçacığı başlatmıştım.Her neyse, bu cevabı da kabul ediyorum. Lütuf ;-) tadını çıkarın. –

İlgili konular