我试图绘制一些数据,使用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()
这不起作用,我不能将变量保存在数学符号的$ $符号之间,因为它被解释为文本。有没有办法将变量放在$ $表示法中?
答案 0 :(得分:4)
原始问题已经过编辑,此答案已更新以反映此问题。
尝试在matplotlib中使用LaTeX格式时,必须使用由r""
表示的原始字符串。
下面给出的代码将迭代range(4)
并使用i'th
均值和方差绘图(如您最初所做的那样)。它还会使用label
为每个地图设置label=r'$v_{}$'.format(i+1)
。这个string formatting只是将{}
替换为format
内的所有内容,在本例中为i+1
。通过这种方式,您可以自动化图表的标签。
我已将plt.axvline(...)
,plt.xlabel(...)
和plt.ylabel(...)
移出for
循环,因为您只需要调用一次。我也出于同样的原因从plt.legend()
循环中删除了for
并删除了其参数。如果您将关键字参数label
提供给plt.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()
答案 1 :(得分:1)
所以事实证明你根据我的回答编辑了你的问题。但是,你;仍然不在那里。如果你想以我认为你想要编码的方式去做,它应该是这样的:
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_1而不是v_0开头,则需要更改str(i+1)
。这样下标是1,2,3和4,而不是0,1,2和3。
希望这有帮助!