現在、Pythonとmatplotlibで何かを実装しています。ポリゴンの描画方法と塗り方を知っていますが、どのように塗りつぶすのですか以外はポリゴンの内部?より明確にするために、axhspan
とaxvspan
のを使用して得られた結果を、水平と垂直の赤い線をクリッピングして赤い四角形を得て、下の結果を修正したいと思います。 : matplotlibの領域の補完
7
A
答えて
4
This postは(と回答)は、本質的にこの質問をします。受け入れられた答えで「編集2」を見てください。プロット範囲の大きさのベクトルポリゴンを作成する方法と、補完する形状に合わせて穴を作成する方法について説明します。これは、ペンの移動時に描画するかどうかを定義する行コードを割り当てることで行います。ここで
はこの質問に関連して上記で参照したポストの一部です:
import numpy as np
import matplotlib.pyplot as plt
def main():
# Contour some regular (fake) data
grid = np.arange(100).reshape((10,10))
plt.contourf(grid)
# Verticies of the clipping polygon in counter-clockwise order
# (A triange, in this case)
poly_verts = [(2, 2), (5, 2.5), (6, 8), (2, 2)]
mask_outside_polygon(poly_verts)
plt.show()
def mask_outside_polygon(poly_verts, ax=None):
"""
Plots a mask on the specified axis ("ax", defaults to plt.gca()) such that
all areas outside of the polygon specified by "poly_verts" are masked.
"poly_verts" must be a list of tuples of the verticies in the polygon in
counter-clockwise order.
Returns the matplotlib.patches.PathPatch instance plotted on the figure.
"""
import matplotlib.patches as mpatches
import matplotlib.path as mpath
if ax is None:
ax = plt.gca()
# Get current plot limits
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# Verticies of the plot boundaries in clockwise order
bound_verts = [(xlim[0], ylim[0]), (xlim[0], ylim[1]),
(xlim[1], ylim[1]), (xlim[1], ylim[0]),
(xlim[0], ylim[0])]
# A series of codes (1 and 2) to tell matplotlib whether to draw a line or
# move the "pen" (So that there's no connecting line)
bound_codes = [mpath.Path.MOVETO] + (len(bound_verts) - 1) * [mpath.Path.LINETO]
poly_codes = [mpath.Path.MOVETO] + (len(poly_verts) - 1) * [mpath.Path.LINETO]
# Plot the masking patch
path = mpath.Path(bound_verts + poly_verts, bound_codes + poly_codes)
patch = mpatches.PathPatch(path, facecolor='white', edgecolor='none')
patch = ax.add_patch(patch)
# Reset the plot limits to their original extents
ax.set_xlim(xlim)
ax.set_ylim(ylim)
return patch
if __name__ == '__main__':
main()
1
矩形の補間が必要な場合は、四角形を四角形で描くことができます(例の画像に表示される四角形のように)。プロットエッジの座標はxlim()
とylim()
で得ることができます。
私はmatplotlibのは、多角形の外側を塗装する方法を提供することを確認していない...
関連する問題
- 1. matplotlib図のxticklabels領域を減らす
- 2. プロット領域を固定するための力のmatplotlib
- 3. 接続された領域の領域
- 4. オーバーラップ領域を含む衛星画像の補間
- 5. matplotlibの領域にxティックを設定する
- 6. matplotlibイメージのボックス領域を選択して拡大します
- 7. matplotlibは発散と収束の領域で合理化する
- 8. matplotlibの散在領域を埋める方法は?
- 9. 別の領域
- 10. 補完ハンドラ内の補完ハンドラ?
- 11. イメージから相補的な領域を切り出す
- 12. matplotlibで網掛け領域を生成する方法
- 13. ガラス領域のコンポーネント
- 14. テキスト領域のキャリッジリターン
- 15. パワーポイントのハイパーリンク領域
- 16. Python - フラグの領域
- 17. NHibernateの第2レベルのキャッシュ領域 - evoval領域
- 18. libgdxのテクスチャ領域へのタッチ領域を制限する
- 19. リストの補完
- 20. matplotlibのカーブの下の領域を陰影付けする方法
- 21. ベイグラントは:(#{地域}領域)
- 22. Oracle Apex One領域が他の領域にスライドする
- 23. Googleマップの表示領域と制限領域
- 24. 要素をある領域から別の領域にドラッグ
- 25. ワークシート内の領域/領域をループしますか?
- 26. マージン - リンク領域
- 27. 色領域
- 28. ChartJSデータオーバーフローチャート領域
- 29. C#カスタムトラックバーバッファ領域
- 30. IBeacon。カスタムフィルタ領域
あなたはを参照してくださいポストは、2Dピクセルイメージをマスキングについてです。これが問題の近似解であっても、理想的な解決策はベクトル描画(ピクセル描画ではない)です。 – EOL
受け入れられた答えの「Edid 2」までスクロールダウンすると、ベクトル解が見つかります。 – Paul
ありがとうbpowah!実際、 'Edit 2'の 'mask_outside_polygon'関数といくつかのハッチングがトリックでした。 –