Python и matplotlib: равный вертикальный интервал символов верхнего и нижнего индексов (с использованием Arial) в легенде графика - PullRequest
0 голосов
/ 09 марта 2020

Учитывая мою последнюю публикацию , мне нужна дополнительная помощь с графикой и шрифтами matplotlib. С дружественной помощью ImportanceOfBeingErnest я смог создать графики в Python, но верхние индексы имеют больший вертикальный пробел или отступ, чем нижние символы (см. Рисунок 1), очевидно, с использованием Arial. Я хотел бы продолжить использование Arial, но символы супер- и нижнего индекса должны быть выровнены нормально (см. Рисунок 2). Мой минимальный рабочий пример выглядит следующим образом:

# MWE - python 3.6.4 / 3.7.2

import numpy as np

import matplotlib as mpl
from matplotlib import rcParams
import matplotlib.pyplot as plt
from matplotlib.pyplot import plot, show

# -------------------------------------------------------------------

rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Arial']
rcParams['font.size'] = 15

# labels in TeX-format are given in a different file in the original program

label_list=["[MX_4(^AY)_4]^-", "[MX(^AY)_4]^-"]

output_array = np.genfromtxt("oa.txt", dtype=float, delimiter=" ")

for ion in range(len(label_list)):
    plt.plot(output_array[:,0], output_array[:,ion], marker="s",label=r"$\mathregular{%s}$" % (label_list[ion-1]))
    plt.legend()

plt.show()

Используемые данные:

0,000000000000000000e + 00 4.127290260366441865e-01 5.872709739633558135e-01 1.000000000000000000e + 00 2.891558564 01 7.108441433957440880e-01 2.000000000000000000e + 00 1.979585968947671082e-01 8.020414031052328641e-01 3.000000000000000000e + 00 1.238903898108838220e-01 8.761096101891161503e-01 4.000000000000000000e + 00 6.903086085544125894e-02 9.309691391445586994e-01 5.000000000000000000e + 00 3.809897879025923167e-02 +9,619010212097407475 е-01 6.000000000000000000e + 00 2.185727788279773209e-02 9.781427221172023234e-01 7.000000000000000000e + 00 1.441899915182357980e-02 9.855810008481764584e-01 8.000000000000000000e + 00 9.900990099009901110e-03 9.900990099009900902e-01 9.000000000000000000e + 00 1.037181996086105652e-02 9.896281800391389938e- 01 1.000000000000000000e + 01 1.068883610451306330e-02 9.893111638954869003e-01 1.100000000000000000e + 01 4.562043795620437589e-03 9.954379562043795815e-01 1. 200000000000000000e + 01 1.573033707865168634e-02 9.842696629213483206e-01 1.300000000000000000e + 01 1.270588235294117622e-02 9.872941176470588776e-01 1.400000000000000000e + 01 1.210121012101210078e-02 9.878987898789879374e-01 1.500000000000000000e + 01 8.961911874533233513e-03 9.910380881254667873e-01 1.600000000000000000e + 01 2.255639097744360777e-02 9.774436090225563367e-01 1.700000000000000000e + 01 2.549575070821529649e-02 9.745042492917846966e-01 1.800000000000000000e + 01 2.564102564102564014e-02 9.743589743589743390e-01 1.900000000000000000e + 01 5.647058823529411964e-02 9.435294117647058387e-01 2.000000000000000000e + 01 +4,780876494023904300 е-02-9.521912350597609986e 01 2.000000000000000000e + 01 1.010452961672473893e-01 8.989547038327526662e-01 1.800000000000000000e + 01 4.583333333333333010e-02 9.541666666666667185e-01 1.600000000000000000e + 01 1.441812564366632375e-02 9.855818743563337092e-01 1.400000000000000000e + 01 2.482678983833718281e- 02 9.751732101616628068e-01 1.200000000000000000e + 01 1. 406309388065374311e-02 9.859369061193462569e-01 1.000000000000000000e + 01 5.292405398253506588e-03 9.947075946017465142e-01 8.000000000000000000e + 00 9.794507393892835923e-03 9.902054926061071294e-01 6.000000000000000000e + 00 2.557103864387300779e-02 9.744289613561269991e-01 4.000000000000000000e + 00 7.076957695769577061e- 02 9.292304230423041878e-01 2.000000000000000000e + 00 1.996676820825256105e-01 8.003323179174743895e-01 0.000000000000000000e + 00 4.226958309964479188e-01 5.773041690035220 * 101 * 101 * 101 * 1011 Пример графика.

Мне бы хотелось, чтобы расстояние (от 'A' и знака минус было на этой высоте (профессионально манипулировалось с помощью GIMP): Рисунок 2: Результат.

Обратите внимание, что данные, используемые для рисунков, отличаются от данных, используемых в MWE.

1 Ответ

0 голосов
/ 10 марта 2020

Я нашел похожий вопрос в StackOverflow, который помог мне решить мою проблему.

Как Стоп Harm Monica предложил, обновив параметры mathtext.FontConstantBase, упомянутые ниже помогает, если вы используете Arial. См. эту ссылку для получения дополнительной информации о mathtext классах.

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

mathtext.FontConstantsBase.sup1 = 0.5

Следующие два параметра обрабатывают нижние символы. Если я прав, sub1 обрабатывает нижние индексы, которые находятся в том же положении, что и верхние индексы, как в X^A_B. С другой стороны, sub2 обрабатывает непарные символы нижнего индекса, такие как X_B.

mathtext.FontConstantsBase.sub1 = 0.4
mathtext.FontConstantsBase.sub2 = 0.4

Обратите внимание, что на символ верхнего индекса влияет положение подстрочного параметра на выходном рисунке . Я обнаружил, что нет mathtext.FontConstantsBase.sup2 -параметра для решения этой проблемы.

Это модифицированный MWE, который я использовал:

# MWE update - python 3.6.4 // 3.7.2

import numpy as np

import matplotlib as mpl
import matplotlib.mathtext as mathtext
from matplotlib import rcParams
import matplotlib.pyplot as plt
from matplotlib.pyplot import plot, show

# -------------------------------------------------------------------

rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Arial']
rcParams['font.size'] = 25
mathtext.FontConstantsBase.sup1 = 0.
mathtext.FontConstantsBase.sub1 = 1.
mathtext.FontConstantsBase.sub2 = 0.5

# labels in TeX-format are given in a different file in the original program

label_list=["[MX^A_B(^AY)_4]^-", "[MX(^AY)_4]^-"]

output_array = np.genfromtxt("oa.txt", dtype=float, delimiter=" ")

for ion in range(len(label_list)):
    plt.plot(output_array[:,0], output_array[:,ion], marker="s", label=r"$\mathregular{%s}$" % (label_list[ion-1]))
    plt.legend()

plt.show

, который выдает эту цифру .

...