【问题标题】:matplotlib make axis ticks label for dates boldmatplotlib 使日期的轴刻度标签变为粗体
【发布时间】:2015-06-28 07:07:06
【问题描述】:

我想在我的轴上有粗体标签,这样我就可以使用该图进行发布。我还需要将图例中线条的标签以粗体绘制。 到目前为止,我可以将轴标签和图例设置为我想要的大小和重量。我也可以将轴标签的大小设置为我想要的大小,但是我在重量方面失败了。

这是一个示例代码:

# 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()

这就是我得到的:

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

编辑

我已使用 toms 响应更新了我的代码。但是我现在有另一个问题,因为我需要在 x 轴上使用 datetime,这与在正常 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()

现在我的结果如下所示:

似乎更改不会影响显示,或者更确切地说是 x 轴刻度标签的权重。

【问题讨论】:

    标签: python matplotlib tex


    【解决方案1】:

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

    您可以通过使用rcParams 将正确的命令添加到 LaTeX 序言中来解决此问题。具体来说,您需要使用 \boldmath 来获得正确的 wieght,并使用 \usepackage{sfmath} 来获得无衬线字体。

    另外,您可以使用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()
    

    【讨论】:

    • 谢谢汤姆,这至少有一点帮助。但是,由于我需要在 x 轴上使用日期,因此这些日期的显示方式与 y 轴不同。另请参阅我更新/编辑的问题。
    • 我找到了解决方案。我需要做的是格式化进入DateFormatter 的字符串,如下所示:ax.xaxis.set_major_formatter(dates.DateFormatter(r'\textbf{%m/%Y}'))
    • @red_tiger:我认为你应该接受这个答案。日期格式是你一开始没有问的。
    • @George 你是对的。答案很好,我找到了其余的。
    【解决方案2】:

    使用

    plt.xticks(x, weight = 'bold')
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    【解决方案3】:
    labels = axes.get_xticklabels() + axes.get_yticklabels()
        [label.set_fontweight('bold') for label in labels]
    

    【讨论】:

    • 使用列表推导来循环会混淆代码。 for label in labels: label.set_fontweight('bold') 会使代码更清晰。
    • 非常感谢!伴侣
    猜你喜欢
    • 2020-09-24
    • 2020-02-18
    • 2011-09-17
    • 2012-12-19
    • 1970-01-01
    • 2019-03-02
    • 2012-03-14
    相关资源
    最近更新 更多