3

これは、この質問への部分的なクロスポストです。
これが私のコードの最小限の例です:

import matplotlib.pyplot as plt

x = [0.0, 0.25, 0.5, 0.75, 1.0]
y = [7.0, 3.0, 5.0, 1.0, 0.0]

II = 2

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y)

# un-comment title as needed:
#plot_title = r"A$_" + str(II) + r"$"
#plot_title = "A$_" + str(II) + "$"
plot_title = (r"A$_%s$" % (str(II)))
print plot_title
plt.title(plot_title)
plt.show()  

同じplot-title-stringには3つの異なるバージョンがあります。上記print plot_titleは、それぞれの場合の正しい生の文字列を示しています。

A$_2$  

ただし、これらのアプローチはいずれも、図に正しい文字列を示していません(使用するバックエンドとは関係ありません)。図の出力は、入力整数値と出力の間のこの関係を示しています。

$0$ -> E  
$1$ -> £  
$2$ -> N  
$3$ -> ®  
$4$ -> X  
$5$ -> ¸(cedille)  
$6$ -> b  
$7$ -> ¿  
$8$ -> j  
$9$ -> 3  

私はpython2.6.6とmatplotlib0.99.1.1を使用しています-これらのバージョンを制御することはできず、それらを使用する必要があります。
目的の出力を取得するには、入力をどのように変更する必要がありますか?

編集

この質問/回答に触発されて、システムが知っているさまざまなフォントをすべて試しました。

import matplotlib.font_manager as font_manager  

for i in range(0,len(sorted(font_manager.findSystemFonts()))):
    plt.rcParams['font.family'] = os.path.basename(sorted(font_manager.findSystemFonts())[i])[:-4]  

そして、各フォントと上記の例のプロットを生成しました。テキストのフォントは異なりますが、気になる下付き文字の1つ$_2$は変更されず、常に。として表示されていましNた。

編集
2matplotlib1.3.0にアップグレードしましたが、問題は解決しました。これは、バージョン0.99.1.1に関係していると私に思わせ
ます。私にとって、これはまだ満足のいくものではありません。なぜこのように動作していたのかを知りたかったからです。

編集3
私はこの質問に出くわしました:Pythonプロットでの上付き文字答えは、問題がの代わりに
使用することから発生する可能性があることを示唆しています。 残念ながら、この場合、これによって出力が変更されることはありませんでした。A$_2$$A_2$

4

2 に答える 2

4

matplotlibバージョン1.3.1とpythonバージョン2.7.8を使用しています。
私も同様の問題を抱えていました。私は書いていました

ax1.set_yticklabels(['$10^4$','$10^5$','$10^6']$'

1はファイシンボルとしてレンダリングされます。0はEとしてレンダリングされます。4はXiとしてレンダリングされます...など。

私はそれを使用することによってそれを「修正」することができましたが、'$\mathregular{10}^\mathregular{4}$'それはちょっと面倒ですが、それは仕事をします。

于 2014-09-10T19:21:33.570 に答える
3

私も同様の問題を抱えていました。この最小限の例:

from matplotlib.pyplot import *
subplot( 111, title=r"$\mathcal{O}\left( N^3 \right)$" )
show()

レンダリングされた:

ここに画像の説明を入力してください

最初に追加するmatplotlib.rc('text', usetex=True)と、問題が解決しました。

from matplotlib.pyplot import *
matplotlib.rc('text', usetex=True)
subplot( 111, title=r"$\mathcal{O}\left( N^3 \right)$" )
show()

ここに画像の説明を入力してください

この行により、matplotlibは内部mathtextエンジンの代わりにLaTeXを使用します。これは、LaTeXのサブセットのようですが、上付き文字は引き続き機能します。LaTeXを使用するには、LaTeXのインストールが機能している必要があります。また、dvipngとghostscriptも必要ですが、速度も遅くなります。したがって、このソリューションは、これらの前提条件がインストールされている場合にのみ試す価値があります。

ここで問題を開きました。

時間のかかるテストをいくつか行った結果、からfonts-lyx 2.2.0-2にダウングレードする2.1.4-2ことで問題が解決したことがわかりました。fonts-lyxはの依存関係ですpython-matplotlib-dataが、特定のバージョンが指定されていないため、この問題が発生します。フォントへの変更がそれを使用するプログラムと互換性がないことを言うことができるほどの技術的な知識はありませんが。

于 2016-08-25T10:57:52.897 に答える