16

プレゼンテーション用に高品質の図を生成したい。グラフィックスの生成には Python の matplotlib を使用しています。残念ながら、PDF エクスポートは私のフォント設定を無視しているようです。

FontPropertiesオブジェクトをテキスト描画関数に渡すことと、オプションをグローバルに設定することの両方で、フォントを設定しようとしました。記録として、問題を再現するための MWE を次に示します。

import scipy
import matplotlib
matplotlib.use('cairo')
import matplotlib.pylab as pylab
import matplotlib.font_manager as fm

data = scipy.arange(5)

for font in ['Helvetica', 'Gill Sans']:
    fig = pylab.figure()
    ax = fig.add_subplot(111)
    ax.bar(data, data)
    ax.set_xticks(data)
    ax.set_xticklabels(data, fontproperties = fm.FontProperties(family = font))
    pylab.savefig('foo-%s.pdf' % font)

どちらの場合も、作成された出力は同じで、Helvetica を使用してます (はい、両方のフォントがインストールされています)。

念のために言っておきますが、次の方法も役に立ちません。

matplotlib.rc('font', family = 'Gill Sans')

最後に、代わりにネイティブ ビューアーを使用してバックエンドを置き換えると、次のようになります。

matplotlib.use('MacOSX')

正しいフォントが表示されますが、ビューアー GUIでのみ表示されます。PDF 出力が再び間違っています。

確かに、他のフォントを設定できますが、他のクラスのフォント ファミリのみを設定できます。serifフォントまたはfantasyまたはを設定できますmonospace。しかし、すべてのサンセリフ フォントはデフォルトで Helvetica に設定されているようです。

4

3 に答える 3

8

基本的には、@Jouni's が正しい答えですが、まだ動作させるのに問題があったため、最終的な解決策は次のとおりです。

#!/usr/bin/env python2.6

import scipy
import matplotlib
matplotlib.use('cairo')
import matplotlib.pylab as pylab
import matplotlib.font_manager as fm

font = fm.FontProperties(
        family = 'Gill Sans', fname = '/Library/Fonts/GillSans.ttc')

data = scipy.arange(5)
fig = pylab.figure()
ax = fig.add_subplot(111)
ax.bar(data, data)
ax.set_yticklabels(ax.get_yticks(), fontproperties = font)
ax.set_xticklabels(ax.get_xticks(), fontproperties = font)
pylab.savefig('foo.pdf')

fontpropertiesキーを使用してフォントを明示的に設定する必要があることに注意してください。どうやら、プロパティのrc設定はありfnameません (少なくとも私は見つけられませんでした)。

のインスタンスfamily化でキーをfont指定することは、ここでは厳密には必要ありません。PDF バックエンドでは無視されます。

このコードはcairoバックエンドでのみ機能します。使用してMacOSXもうまくいきません。

于 2010-05-09T18:53:45.613 に答える
3

"family" 引数と対応する rc パラメータは、実際にこの方法で使用できるフォントの名前を指定するためのものではありません。(おそらくバロック様式の) CSS に似たフォント選択システムがあり、同じスクリプトが異なるコンピューターで動作し、利用可能な最も近いフォントを選択するのに役立ちます。たとえば Gill Sans を使用する通常推奨される方法は、rc パラメータ font.sans-serif の値の前に追加し (サンプル rc ファイルを参照)、次に font.family を sans-serif に設定することです。

これは、フォント マネージャが何らかの理由で Gill Sans が仕様に最も近いものではないと判断した場合に厄介です。フォント選択ロジックをバイパスする方法は、FontProperties(fname='/path/to/font.ttf')( docstring ) を使用することです。

あなたの場合、MacOSX バックエンドはオペレーティング システムのメカニズムを介してフォントを使用するため、すべての種類のフォントを自動的にサポートすると思われますが、pdf バックエンドには、Gill Sans のバージョンをサポートしない独自のフォント サポート コードがあります。

于 2010-05-09T13:45:33.510 に答える