2016-07-10 1 views
2

別のイメージに描画される楕円形のポリゴンを計算します。ポリゴンは一緒に1つの形状を形成し、単一の透明度を持たなければならない。残念ながら、1つのポリゴンを別のポリゴンに引くと、スタックは異なる透明度を取得します。下の例では、3つのポリゴンを作成し、3つの透明画を作成し、1つではなく異なるグレーの領域にしました。誰もが単一の透明性を得る方法を知っていますか?パッチを組み合わせてmatplotlibで単一の透明度を取得する

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon, Rectangle 

def get_ellipse_coords(a=0.0, b=0.0, x=0.0, y=0.0, angle=0.0, k=2): 

    pts = np.zeros((360*k+1, 2)) 
    beta = -angle * np.pi/180.0 
    sin_beta = np.sin(beta) 
    cos_beta = np.cos(beta) 
    alpha = np.radians(np.r_[0.:360.:1j*(360*k+1)]) 

    sin_alpha = np.sin(alpha) 
    cos_alpha = np.cos(alpha) 

    pts[:, 0] = x + (a * cos_alpha * cos_beta - b * sin_alpha * sin_beta) 
    pts[:, 1] = y + (a * cos_alpha * sin_beta + b * sin_alpha * cos_beta) 

    return pts 

if __name__ == '__main__': 

    fig = plt.figure() 
    ax = fig.add_subplot(111, aspect='equal') 
    plt.xlim([-5,5]) 
    plt.ylim([-5,5]) 

    c='0.5' 
    alp=0.5 

    ax.add_patch(Rectangle((1.5, -4.0),0.5,8.0, 
          color='lightblue', zorder=1)) 

    pts = get_ellipse_coords(a=4.0, b=1.0) 
    ax.add_patch(Polygon(pts, closed=True, lw=0.5, 
         color=c, alpha=alp,zorder=2)) 

    pts = get_ellipse_coords(a=4.0, b=1.0, x=1.0, angle=30) 
    ax.add_patch(Polygon(pts, closed=True, lw=0.5, 
         color=c, alpha=alp, zorder=2)) 

    pts = get_ellipse_coords(a=2.0, b=0.25, x=2.0, y=-2.0, angle=250) 
    ax.add_patch(Polygon(pts, closed=True, lw=0.5, 
         color=c, alpha=alp, zorder=2)) 

    plt.show() 

np.concatenateをありがとう、私は必要トリックん、最初の答えで提案されている:このように

[...] 
    ax.add_patch(Rectangle((1.5, -4.0),0.5,8.0, 
          color='lightblue', zorder=1)) 

    pts1 = get_ellipse_coords(a=4.0, b=1.0) 
    pts2 = get_ellipse_coords(a=4.0, b=1.0, x=1.0, angle=30) 
    pts3 = get_ellipse_coords(a=2.0, b=0.25, x=2.0, y=-2.0, angle=250) 

    stoppoint = np.array([[np.nan,np.nan]])  
    pts = np.concatenate((pts1, stoppoint, pts2)) 
    pts = np.concatenate((pts, stoppoint, pts3)) 

    ax.add_patch(Polygon(pts, closed=True, lw=0.0, 
         color=c, alpha=alp, zorder=2)) 

答えて

1

stoppointはA

pts1 = get_ellipse_coords(a=4.0, b=1.0) 
pts2 = get_ellipse_coords(a=4.0, b=1.0, x=1.0, angle=30) 
stoppoint = np.array([[nan,nan]])  

pts = np.concatenate((pts1, stoppoint, pts2)) 

ax.add_patch(Polygon(pts, closed=True, lw=0.5, 
        color=c, alpha=alp,zorder=2)) 

を防止楕円を結ぶ線。

+0

まだ分かりませんが、これはうまくいくようです。ありがとうございました! – frits

+0

単一のオブジェクトに楕円を結合するだけです。透明度はオブジェクト全体に割り当てられます。 – Aguy

+0

私はそれを持って、ありがとう。私の元の問題は解決されました。 – frits

関連する問題