パス エフェクト ガイド#

キャンバス上でオブジェクトがたどるパスを定義します。

Matplotlib のpatheffectsモジュールは、複数の描画ステージを任意のアーティストに適用する機能を提供し、path.Path.

パス効果を適用できるアーティストにはpatches.Patchlines.Line2Dcollections.Collection、さらにはtext.Text. 各アーティストのパス エフェクトArtist.set_path_effectsは、イテラブルなAbstractPathEffectインスタンスを取るメソッドを介して制御できます。

最も単純なパス エフェクトはNormalエフェクトです。これは、エフェクトなしでアーティストを描画するだけです。

import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects

fig = plt.figure(figsize=(5, 1.5))
text = fig.text(0.5, 0.5, 'Hello path effects world!\nThis is the normal '
                          'path effect.\nPretty dull, huh?',
                ha='center', va='center', size=20)
text.set_path_effects([path_effects.Normal()])
plt.show()
経路効果ガイド

プロットはパス エフェクトなしで期待するものと何ら変わりませんが、テキストの描画はパス エフェクト フレームワークを使用するように変更され、より興味深い例の可能性が開かれました。

影を追加する#

ドロップ シャドウよりもはるかに興味深いパス エフェクトNormalは、パス ベースのアーティストに適用できます。クラスSimplePatchShadowSimpleLineShadowは、元のアーティストの下に塗りつぶしパッチまたは線パッチを描画することで、これを正確に行います。

import matplotlib.patheffects as path_effects

text = plt.text(0.5, 0.5, 'Hello path effects world!',
                path_effects=[path_effects.withSimplePatchShadow()])

plt.plot([0, 3, 2, 5], linewidth=5, color='blue',
         path_effects=[path_effects.SimpleLineShadow(),
                       path_effects.Normal()])
plt.show()
経路効果ガイド

この例では、パス効果を設定する 2 つの方法に注意してください。前者は、クラスを使用しwith*て目的の機能を自動的に組み込み、その後に「通常の」効果を追加します。後者は、描画する 2 つのパス効果を明示的に定義します。

アーティストを目立たせる#

アーティストを視覚的に目立たせる良い方法の 1 つは、実際のアーティストの下に太い色で輪郭を描くことです。Strokeパス効果により、これは比較的単純なタスクになります。

fig = plt.figure(figsize=(7, 1))
text = fig.text(0.5, 0.5, 'This text stands out because of\n'
                          'its black border.', color='white',
                          ha='center', va='center', size=30)
text.set_path_effects([path_effects.Stroke(linewidth=3, foreground='black'),
                       path_effects.Normal()])
plt.show()
経路効果ガイド

この効果は、テキスト パスを 2 回描画したためにのみ機能することに注意してください。1 回は太い黒線で、もう 1 回は元のテキスト パスを上にします。

お気付きかもしれませんが、to Strokeand SimplePatchShadow and andSimpleLineShadowは通常のアーティスト キーワード ( facecolor edgecolorなど) ではありません。これは、これらのパス効果により、Matplotlib の下位レベルで動作しているためです。実際、受け入れられるキーワードは、matplotlib.backend_bases.GraphicsContextBase新しいバックエンドを簡単に作成できるように設計されたインスタンスのキーワードであり、ユーザー インターフェイスのキーワードではありません。

パス エフェクト アーティストのより優れたコントロール#

すでに述べたように、一部のパス エフェクトは、ほとんどのユーザーが慣れているレベルよりも低いレベルで動作します 。つまり、 facecoloredgecolorなどのキーワードを設定するとAttributeError が発生します。幸いなことに 、元のパスを持つクラスPathPatchEffectを作成する一般的なパス効果があります。patches.PathPatchこの効果のキーワードは、次のものと同じですpatches.PathPatch

fig = plt.figure(figsize=(8.5, 1))
t = fig.text(0.02, 0.5, 'Hatch shadow', fontsize=75, weight=1000, va='center')
t.set_path_effects([
    path_effects.PathPatchEffect(
        offset=(4, -4), hatch='xxxx', facecolor='gray'),
    path_effects.PathPatchEffect(
        edgecolor='white', linewidth=1.1, facecolor='black')])
plt.show()
経路効果ガイド

Sphinx-Gallery によって生成されたギャラリー