我想在我的轴上有粗体标签,这样我就可以使用图进行发布。我还需要用粗体绘制图例中的线的标签。到目前为止,我可以将轴标签和图例设置为我想要的大小和权重。我也可以将轴标签的大小设置为我想要的大小,但是我无法设置权重。
下面是一个示例代码:
# 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()
字符串
这就是我得到的
的数据
任何想法,我错过了什么或做错了,以获得轴蜱标签在粗体?
编辑
我已经更新了我的代码,使用了datetime
响应。然而,我现在有另一个问题,因为我需要在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轴刻度标签的权重。
6条答案
按热度按时间k2fxgqgv1#
使用
字符串
7lrncoxx2#
我认为问题是因为刻度是在LaTeX数学模式下制作的,所以字体属性不适用。
您可以通过使用
rcParams
将正确的命令添加到LaTeX前导中来解决这个问题。具体来说,您需要使用\boldmath
来获得正确的权重,并使用\usepackage{sfmath}
来获得sans-serif字体。此外,您可以使用
set_tick_params
设置刻度标签的字体大小。在
python 3.12.0
、matplotlib 3.8.0
中测试数字
xticklabels
字符串
x1c 0d1x的数据
日期时间
xticklabels
型
的
ff29svar3#
字符串
mbskvtky4#
[fr'\textbf{{{v}}}' for v in ax.get_xticks()]
使用3组{}
,因为也使用了f字符串。{}
,fr'\textbf{v}'
,则只有第一个字符将是粗体。Axes
接口。如果使用了隐式的pyplot
接口,那么在plot调用之后,用ax = plt.gca()
获取Axes
。*在
python 3.12.0
、matplotlib 3.8.0
中测试字符串
的数据
yyyllmsg5#
如果你想让轴标签自动加粗(即不必每次都添加\textbf),你可以执行以下操作
字符串
这利用了
Axis.set_xlabel
和Axis.set_ylabel
方法是属性的事实(在本例中是函数对象),可以由用户修改。修改在add_bold
中完成,orig_func
和add_bold
是在get_new_func
内部定义的,以便正确地保留对原始方法(即,我正在形成一个闭包)。hmtdttj46#
这是另一个例子
字符串
youtput就像这样:
的数据