matplotlib使日期粗体的轴刻度标签

red*_*ger 4 python matplotlib tex

我希望在我的轴上有粗体标签,所以我可以使用该图块进行发布.我还需要在图例中以粗体显示线条的标签.到目前为止,我可以将轴标签和图例设置为我想要的尺寸和重量.我也可以将轴标签的大小设置为我想要的大小,但是我的重量不足.

这是一个示例代码:

# 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()
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

情节例子

知道我错过了什么或做错了,以便以粗体显示轴刻度标签?

编辑

我使用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()
Run Code Online (Sandbox Code Playgroud)

现在我的结果如下:

更新的数字

似乎这些变化不会影响显示,也不会影响x轴刻度标签的重量.

小智 9

plt.xticks(x, weight = 'bold')
Run Code Online (Sandbox Code Playgroud)

  • 请不要仅发布代码作为答案,还要提供解释您的代码的作用以及它如何解决问题的问题。带解释的答案通常更有帮助,质量也更好,并且更有可能吸引点赞。 (5认同)

小智 9

labels = axes.get_xticklabels() + axes.get_yticklabels()
    [label.set_fontweight('bold') for label in labels]
Run Code Online (Sandbox Code Playgroud)

  • 仅使用列表理解来循环会使代码变得混乱。`for label in labels: label.set_fontweight('bold')` 将使代码更清晰。 (8认同)

tmd*_*son 8

我认为问题是因为刻度是在LaTeX数学模式下进行的,所以字体属性不适用.

你可以通过使用正确的命令添加到LaTeX前导码来解决这个问题rcParams.具体来说,您需要使用\ boldmath来获取正确的wieght,并使用\ usepackage {sfmath}来获取sans-serif字体.

此外,您还可以使用set_tick_params设置刻度标签的字体大小.在此输入图像描述

这里有一些代码可以满足您的需求:

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()
Run Code Online (Sandbox Code Playgroud)