2013-05-29 4 views
4

Я составляю некоторые графики для математического класса, и я не могу получить интервал для мирских определений, совершенно правильно в легенде сюжета. Я в настоящее время используюРавномерное расстояние с Matplotlib и TeX

\, 

для одного пространства в TeX, но работать в ситуации, когда один немного дальше вверх, чем другие, может быть из-за того, сколько уравнения слева занимают. Вот мой код

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

# 0-1 
x = np.linspace(0, 1) 
y = np.power(x, 2) 
plt.plot(x, y, label=r"$t^2 \,\,\,\,\,\, 0 \leq t \leq 1$") 

#1-2 
x = [1,2] 
y = [1,1] 
plt.plot(x, y, label=r"$1 \,\,\,\,\,\,\, 1 < t \leq 2$") 

#2-3 
x = np.linspace(2, 3) 
y = 3-x 
plt.plot(x, y, label=r"$3 - t \,\,\,\, 2 < t \leq 3$") 


plt.grid() 
plt.axis([0,3,0,1.5]) 
plt.legend(loc='upper right') 
plt.show() 

Вот результат

Как отформатировать это эффективно таким образом, что всегда будет работать независимо от размеров пикселей на левой?

+0

У вас включен 'usetex' (a la http://matplotlib.org/users/usetex.html)? – BrenBarn

+0

Нет, я использую метод r^& $ $. – ceptno

+2

Возможно, вам нелегко будет сделать это идеальным для пикселя, так как я не думаю, что понятие matplotlib о легендарных ярлыках предназначено для поддержки такого рода выравнивания отдельных частей метки. Вы можете попробовать использовать 'usetex', который использует реальный TeX вместо аппроксимации matplotlib, но я не знаю, улучшит ли это что-то. – BrenBarn

ответ

5

Вы, безусловно, можете улучшить расстояние, обратившись к более низкому уровню LaTeX. Для начала, в верхней части ваших участков запуска:

from matplotlib import rc 
rc('text', usetex=True) 

Используя комбинацию \makebox и \hfill вы можете площадку из пространства между двумя секциями:

label=r"\makebox[4cm]{$t^2$ \hfill $0 \leq t \leq 1$}" 
label=r"\makebox[4cm]{$1$ \hfill $1 < t \leq 2$}" 
label=r"\makebox[4cm]{$3 - t$ \hfill $2 < t \leq 3$}" 

enter image description here

Правда это не идеально, но с комбинацией нескольких \makebox и заполняет, вы можете точно настроить то, что вам нужно. В идеале вы можете написать собственный обработчик условных обозначений, который «знает» многострочный блок TeX, но я уверен, что это нетривиально.

+0

Привет, Записан, спасибо за отличный ответ. Я достаточно углубляюсь в математику и технику, и вскоре мне придется писать исследовательские работы. У вас есть хорошие ресурсы для изучения TeX для программиста, знакомого с CSS, Java и Python? – ceptno

+1

@Brandon Ну всегда есть http://tex.stackexchange.com/ :) Чтобы найти нужный вам символ, http://detexify.kirelabs.org/classify.html – Hooked