5

forループを使用して分布をプロットして、いくつかのデータをプロットしようとしています。ここで、ループ カウンターに従ってこれらの分布に数学表記の添字としてラベルを付けたいと思います。これは、現時点で私がいる場所です。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab

mean = [10,12,16,22,25]
variance = [3,6,8,10,12]
x = np.linspace(0,40,1000)
for i in range(4):
    sigma = np.sqrt(variance[i])
    y = mlab.normpdf(x,mean[i],sigma)
    plt.plot(x,y,label=$v_i$) # where i is the variable i want to use to label. I should also be able to use elements from an array, say array[i] for the same.
    plt.xlabel("X")
    plt.ylabel("P(X)")
plt.legend()
plt.axvline(x=15, ymin=0, ymax=1,ls='--',c='black')    
plt.show()

これは機能せず、テキストとして解釈されるため、数学表記の $ $ 記号の間に変数を保持できません。変数を $ $ 表記にする方法はありますか?

4

2 に答える 2

7

元の質問が編集されました。これを反映するために、この回答が更新されました。

matplotlib で LaTeX フォーマットを使用する場合は、 で示される生の文字列を使用する必要がありますr""

以下に示すコードは、(最初に行ったように) 平均と分散range(4)を使用して繰り返し処理し、プロットします。i'thまた、labelを使用して for each プロットを設定しlabel=r'$v_{}$'.format(i+1)ます。この文字列の書式設定{}は、単に内部formatで呼び出されたもの (この場合は ) に置き換えi+1ます。このようにして、プロットのラベルを自動化できます。

一度だけ呼び出す必要があるため、ループからplt.axvline(...),plt.xlabel(...)とを削除しました。同じ理由でループからも削除し、その引数を削除しました。キーワード引数to を指定すると、プロット時にプロットに個別にラベルを付けることができます。plt.ylabel(...)forplt.legend()forlabelplt.plot()

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab

mean = [10,12,16,22,25]
variance = [3,6,8,10,12]

x = np.linspace(0,40,1000)

for i in range(4):
    sigma = np.sqrt(variance[i])
    y = mlab.normpdf(x,mean[i],sigma)
    plt.plot(x,y, label=r'$v_{}$'.format(i+1))

plt.xlabel("X")
plt.ylabel("P(X)")        
plt.axvline(x=15, ymin=0, ymax=1,ls='--',c='black')

plt.legend()
plt.show()

プロット

于 2014-04-24T18:44:01.343 に答える
4

したがって、私の回答に基づいて質問を編集したことがわかりました。しかし、まだ十分ではありません。コーディングしたいと思う方法でやりたい場合は、次のようにする必要があります。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab

mean = [10, 12, 16, 22, 25]
variance = [3, 6, 8, 10, 12]
x = np.linspace(0, 40, 1000)
for i in range(4):
    sigma = np.sqrt(variance[i])
    y = mlab.normpdf(x, mean[i], sigma)
    plt.plot(x, y, label = "$v_{" + str(i) + "}$") 
    plt.xlabel("X")
    plt.ylabel("P(X)")

plt.legend()
plt.axvline(x = 15, ymin = 0, ymax = 1, ls = '--', c = 'black')  

plt.show()

このコードは次の図を生成します: ここに画像の説明を入力 最初のプロットを v_0 ではなく v_1 で開始する場合は、変更する必要があるのはstr(i+1). このように、添字は 0、1、2、および 3 ではなく、1、2、3、および 4 になります。

お役に立てれば!

于 2014-04-24T23:00:41.630 に答える