2014-03-12 7 views
4

У меня есть проблема, которая, как я думал, будет более значимой. Однако, после очистки Интернета в течение некоторого времени, я не смог найти решение моей проблемы. Итак, вот оно:Upright mu in plot label: сохранившиеся оригинальные тик-шрифты

Для сюжета, созданного с использованием matplotlib.pyplot Я хочу включить микрометр SI-unit в свою xlabel. Однако микрокомпьютер должен быть в вертикальном положении. После некоторого возиться я достиг желаемого xlabel.

Код, который я должен генерировать это:

import matplotlib 
import matplotlib.pyplot as plt 

matplotlib.rc('text', usetex = True) 
params = {'text.latex.preamble': [r'\usepackage{siunitx}', r'\usepackage{cmbright}']} 
plt.rcParams.update(params) 


fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 

ax.set_xlabel('$\si{\micro \meter}$', fontsize = 16) 
ax.set_ylabel("hi", fontsize = 16) 

plt.savefig("test.png") 

Результат показан ниже: enter image description here микро метр точно так, как я хочу, чтобы это было. Однако проблема заключается в том, что шрифт x и y тиков изменяется. Это связано с:

matplotlib.rc('text', usetex = True) 

Как сбросить значения шрифта до их первоначальных значений? Или как я могу убедиться, что шрифты не изменяются при вводе tex?

В качестве эталона, исходные значения я имею в виду, чтобы выглядеть следующим образом: enter image description here Кроме того, пытаясь вернуть шрифты обратно к своим первоначальным значениям я пробовал разные способы включения микро метра в мой xlabel. Проблема, которая возникает здесь, заключается в том, что она остается курсивной или имеет жирный шрифт. Микрометр, который я ищу, тот, который указан на первом рисунке.

Я надеюсь, что кто-то может помочь мне решить эту проблему.

Thanx заранее

ответ

2

Я также борется с такой проблемой, то есть получение клеща меток и осей этикетки быть последовательным, когда text.usetex = True. Решение, которое мне удалось найти, не идеально, но оно работает на данный момент.

То, что вы должны сделать, это установить семейство шрифтов для «без засечек», а также добавить пакет из латекса, который использует рубленый математические шрифты (sfmath - убедитесь, что в вашем текс пути)

import matplotlib 
import matplotlib.pyplot as plt 

matplotlib.rc('text', usetex = True) 
matplotlib.rc('font', **{'family':"sans-serif"}) 
params = {'text.latex.preamble': [r'\usepackage{siunitx}', 
    r'\usepackage{sfmath}', r'\sisetup{detect-family = true}', 
    r'\usepackage{amsmath}']} 
plt.rcParams.update(params) 

fig = plt.figure(figsize = (4,4)) 
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('$\si{\um} detection$') 
ax.set_ylabel(r"$\mu \boldsymbol{\mu}$") 
plt.show()        

Кроме того, я должен был сообщить пакет siunitx, чтобы определить семейство шрифтов, и мне также пришлось добавить дополнительный текст к x-метке, чтобы обнаружение действительно работало (вы можете удалить этот текст позже и после этого метка все равно будет работать).

Для меня это приводит: enter image description here В более общем плане, я следующий мой ~/.matplotlib файл/matploblibrc, для засечек шрифтов:

font.family : serif 
text.latex.preamble : \usepackage{mathptmx} 

и без засечек:

font.family : sans-serif 
text.latex.preamble : \usepackage{sfmath} 
+0

Спасибо много. Все еще ищут «правильные» ярлыки, но это определенно будет делать пока. Еще раз спасибо! –

+0

Под «правильным» вы подразумеваете sans-serif из вашего примера? Я понятия не имею, почему, но когда я запускаю ваш пример (при всех настройках параметров matplotlibrc), я получаю шрифты с засечками для метки микрометра (которые не меняются при использовании настроек засечек). Но так как вы, похоже, можете автоматически получить sans-serif, что произойдет, если вы используете настройки без засечек, которые я предложил? – turnerm

+0

Мне удалось заставить его работать с sans-serif, см. Мое редактирование на почту! – turnerm

1

То, что сработало для меня не было usetex, но использовать Unicode:

ax.set_xlabel(u'\u03bc') 

устанавливает этикетку как одну вертикальную mu.

Это требует следующих параметров при загрузке matplotlib:

import matplotlib 
matplotlib.rcParams['mathtext.fontset'] = 'cm' 
matplotlib.rc('font', family='serif', serif='CMU Serif') 
import matplotlib.pyplot as plt 

Здесь я использую «Computer Modern Unicode» шрифт из Sourceforge (настоятельно рекомендуется, если вы хотите консистенцию с письменным набранным в LaTeX и его по умолчанию шрифт Computer Modern).

Но любой шрифт Юникода с символом mu должен работать. На самом деле, mu от CMU Serif не так эстетичен, как mu от SIunitx, но это правильно.

Чтобы начать действовать, необходимо перезапустить Python.

0

У меня была такая же проблема, и это ее решили:

В вашем matplotlibrc изменения файла

mathtext.default : it 

в

mathtext.default : regular