2015-04-21 2 views
4

Я хочу иметь жирные надписи на моей оси, поэтому я могу использовать сюжет для публикации. Мне также нужно иметь метку линий в легенде, выделенной жирным шрифтом. Пока я могу установить метки оси и легенду на размер и вес, которые я хочу. Я также могу установить размер меток оси для размера, который я хочу, однако я терпеть неудачу с весом.matplotlib make axis ticks label для дат жирным

Вот пример кода:

# plotting libs 
from pylab import * 
from matplotlib import rc 


if __name__=='__main__': 

    tmpData = np.random.random(100) 


    # activate latex text rendering 
    rc('text', usetex=True) 
    rc('axes', linewidth=2) 
    rc('font', weight='bold') 

    #create figure 
    f = figure(figsize=(10,10)) 

    ax = gca() 

    plot(np.arange(100), tmpData, label=r'\textbf{Line 1}', linewidth=2) 

    ylabel(r'\textbf{Y-AXIS}', fontsize=20) 
    xlabel(r'\textbf{X-AXIS}', fontsize=20) 

    fontsize = 20 
    fontweight = 'bold' 
    fontproperties = {'family':'sans-serif','sans-serif':['Helvetica'],'weight' : fontweight, 'size' : fontsize} 
    ax.set_xticklabels(ax.get_xticks(), fontproperties) 
    ax.set_yticklabels(ax.get_yticks(), fontproperties) 

    for tick in ax.xaxis.get_major_ticks(): 
     tick.label1.set_fontsize(fontsize) 

    for tick in ax.yaxis.get_major_ticks(): 
     tick.label1.set_fontsize(fontsize) 



    legend() 
    show() 

    sys.exit() 

И это то, что я получаю:

plot example

Любая идея, что я пропускаю или делаю неправильно, чтобы получить ось клещей метку жирным шрифтом?

EDIT

Я обновил свой код, используя Toms ответ. Однако у меня теперь есть еще одна проблема, так как мне нужно использовать datetime по оси x, это не имеет такого же эффекта, как на нормальной оси y (извините за то, что вы не ввели это в исходный вопрос, но я не думал, что это бы изменить положение вещей):

# plotting libs 
from pylab import * 
from matplotlib import rc, rcParams 
import matplotlib.dates as dates 

# datetime 
import datetime 

if __name__=='__main__': 

    tmpData = np.random.random(100) 
    base = datetime.datetime(2000, 1, 1) 
    arr = np.array([base + datetime.timedelta(days=i) for i in xrange(100)]) 


    # activate latex text rendering 
    rc('text', usetex=True) 
    rc('axes', linewidth=2) 
    rc('font', weight='bold') 

    rcParams['text.latex.preamble'] = [r'\usepackage{sfmath} \boldmath'] 

    #create figure 
    f = figure(figsize=(10,10)) 

    ax = gca() 

    plot(np.arange(100), tmpData, label=r'\textbf{Line 1}', linewidth=2) 

    ylabel(r'\textbf{Y-AXIS}', fontsize=20) 
    xlabel(r'\textbf{X-AXIS}', fontsize=20) 

    ax.xaxis.set_tick_params(labelsize=20) 
    ax.yaxis.set_tick_params(labelsize=20) 

    ax.xaxis.set_major_formatter(dates.DateFormatter('%m/%Y')) 
    ax.xaxis.set_major_locator(dates.MonthLocator(interval=1)) 


    legend() 

Теперь мой результат выглядит следующим образом:

updated figure

Казалось бы, что изменения лани не влияют на отображение или, вернее, вес оси х клещи этикетки.

ответ

5

Я думаю, проблема в том, что тики сделаны в математическом режиме LaTeX, поэтому свойства шрифта не применяются.

Вы можете обойти это, добавив правильные команды в преамбулу LaTeX, используя rcParams. В частности, вам нужно использовать \ boldmath для получения правильного wieght и \ usepackage {sfmath}, чтобы получить шрифт sans-serif.

Кроме того, вы можете использовать set_tick_params для установки размера шрифта ярлыков меток. enter image description here

Вот код, который делает то, что вы хотите:

import numpy as np 
from matplotlib import rc,rcParams 
from pylab import * 

tmpData = np.random.random(100) 


# activate latex text rendering 
rc('text', usetex=True) 
rc('axes', linewidth=2) 
rc('font', weight='bold') 
rcParams['text.latex.preamble'] = [r'\usepackage{sfmath} \boldmath'] 

#create figure 
f = figure(figsize=(10,10)) 

ax = gca() 

plot(np.arange(100), tmpData, label=r'\textbf{Line 1}', linewidth=2) 

ylabel(r'\textbf{Y-AXIS}', fontsize=20) 
xlabel(r'\textbf{X-AXIS}', fontsize=20) 

ax.xaxis.set_tick_params(labelsize=20) 
ax.yaxis.set_tick_params(labelsize=20) 

legend() 
+0

Благодаря том, что это помогает, по крайней мере немного. Однако, поскольку мне нужно использовать даты на моей оси x, они не отображаются так же, как и ось y. См. Также мой обновленный/отредактированный вопрос. –

+1

Я нашел решение. Что мне нужно сделать, это форматировать строку, которая входит в 'DateFormatter' следующим образом: ' ax.xaxis.set_major_formatter (date.DateFormatter (r '\ textbf {% m /% Y}')) ' –

+1

@red_tiger: Я думаю, вы должны принять ответ. Формат даты - это то, о чем вы не спрашивали в первую очередь. – George