11

このトピックに関する別のスレッドやドキュメントが見つかりませんでした-pythonsmatplotlibパッケージでアンダースコアを付けることに成功した人はいますか?私が使用している構文は、他のすべての属性に対して次のようなものです。

plt.text(0.05, 0.90, 'Parameters: ', fontsize=12)

ただし、実際にファイルに行をコーディングしない限り、このテキストに下線を引く方法がわかりません。

考え?

4

2 に答える 2

16

Matplotlib は、LaTeX を使用してすべてのテキストを処理できます。詳細については、ドキュメントのこのページを参照してください。LaTeX でテキストに下線を引くコマンドは単純に\underline. サンプル スクリプトの 1 つの docstring から:

rcパラメーター text.usetex が設定されている場合、TeX を使用してすべての matplotlib テキストをレンダリングできます。これは現在aggおよびバックエンドで機能し、 http://matplotlib.sf.net/matplotlib.texmanager.htmlpsで説明されている tex およびその他の依存関係がシステムに適切にインストールされている必要があります。スクリプトを初めて実行すると、tex および関連ツールからの多くの出力が表示されます。次回は、多くの情報が ~/.tex.cache にキャッシュされるため、実行はサイレントになる可能性があります

簡単な例として

import matplotlib.pyplot as plt
from matplotlib import rc

rc('text', usetex=True)

plt.sunplot(111)

plt.text(0.05, 0.90, r'\underline{Parameters}: ', fontsize=12)

下線付きのテキストを取得します。

于 2012-05-23T20:57:47.237 に答える
0

これは古い質問ですが、実際には LaTeX を使用していないテキストに下線を引く必要があったため、同じ問題に遭遇する可能性のある他の人のために、思いついた解決策をフォローアップすると考えました。

最終的に、私のソリューションは、問題のテキスト オブジェクトの境界ボックスを見つけてから、注釈コマンドで arrowprop 引数を使用して、テキストの下に直線を描画します。このアプローチにはいくつかの注意点がありますが、全体として、下線を好きなようにカスタマイズできるため、非常に柔軟だと思います。

私の解決策の例は次のとおりです。

import matplotlib.pyplot as plt 
import numpy as np 

def test_plot():
    f = plt.figure()
    ax = plt.gca()
    ax.plot(np.sin(np.linspace(0,2*np.pi,100)))

    text1 = ax.annotate("sin(x)", xy=(.7,.7), xycoords="axes fraction")   
    underline_annotation(text1)

    text2 = ax.annotate("sin(x)", xy=(.7,.6), xycoords="axes fraction",
                        fontsize=15, ha="center")
    underline_annotation(text2)

    plt.show()

def underline_annotation(text):
    f = plt.gcf()
    ax = plt.gca()
    tb = text.get_tightbbox(f.canvas.get_renderer()).transformed(f.transFigure.inverted())
                            # text isn't drawn immediately and must be 
                            # given a renderer if one isn't cached.
                                                    # tightbbox return units are in 
                                                    # 'figure pixels', transformed 
                                                    # to 'figure fraction'.
    ax.annotate('', xy=(tb.xmin,tb.y0), xytext=(tb.xmax,tb.y0),
                xycoords="figure fraction",
                arrowprops=dict(arrowstyle="-", color='k'))
                #uses an arrowprops to draw a straightline anywhere on the axis.

これにより、下線付きの注釈付きの sin の例が生成されます。

注意すべきことの 1 つは、下線を埋めたい場合、または線の太さを制御したい場合 (線の太さは両方の注釈で同じであることに注意してください)、'underline_annotation' コマンド内で手動で行う必要があることですが、これはarrowprops dict を介してより多くの引数を渡すか、線が描かれている場所を拡張することで、非常に簡単に実行できます。

于 2021-12-31T15:45:47.900 に答える