Запись переменных в виде индексов в математическом режиме

Я пытаюсь построить некоторые данные, используя цикл 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() 

Это не работает, и я не могу сохранить переменную между знаками $ $ математической нотации, поскольку она интерпретируется как текст. Есть ли способ поместить переменную в нотацию $ $?

2 Solutions collect form web for “Запись переменных в виде индексов в математическом режиме”

Исходный вопрос был отредактирован, этот ответ был обновлен, чтобы отразить это.

При попытке работать с форматированием LaTeX в matplotlib вы должны использовать необработанные строки, обозначенные символом r"" .

Приведенный ниже код будет перебирать по range(4) и i'th с использованием i'th среднего и дисперсии (как вы изначально сделали). Он также устанавливает label для каждого графика с использованием label=r'$v_{}$'.format(i+1) . Это строковое форматирование просто заменяет {} на все, что вызывается внутри format , в этом случае i+1 . Таким образом, вы можете автоматизировать этикетки для своих участков.

Я удалил plt.axvline(...) , plt.xlabel(...) и plt.ylabel(...) из цикла for поскольку вам нужно только позвонить ему один раз. Я также удалил plt.legend() из цикла for по той же причине и удалил свои аргументы. Если вы plt.plot() label аргументов ключевого слова на plt.plot() вы можете пометить свои сюжеты индивидуально по мере их 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() 

участок

Получается, что вы отредактировали свой вопрос на основе моего ответа. Однако вы все еще не совсем там. Если вы хотите сделать это так, как я думаю, вы хотите его закодировать, это должно быть так:

 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.

Надеюсь это поможет!

  • Понимание matplotlib verts
  • Переполнение памяти при сохранении графиков Matplotlib в цикле
  • альтернатива времени python.sleep ()
  • При установке кривой кривой в набор данных в Python
  • Раскрашивание краев сети по весу
  • Повернуть текст оси в python matplotlib
  • Построение 3D-полигонов в python-matplotlib
  • Добавление дополнительных контурных линий с использованием matplotlib 2D контурной графики
  • Сюжетные темы с bokeh или matplotlib
  • Почему pip устанавливает matplotlib версии 0.91.1, когда PyPi показывает версию 1.0.0?
  • Networkx: перекрытие краев при визуализации MultiGraph
  • Python - лучший язык программирования в мире.