Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib:将轴标签/图例从粗体更改为常规权重_Python_Matplotlib_Latex - Fatal编程技术网

Python matplotlib:将轴标签/图例从粗体更改为常规权重

Python matplotlib:将轴标签/图例从粗体更改为常规权重,python,matplotlib,latex,Python,Matplotlib,Latex,我试图制作一些出版物质量的情节,但遇到了一个小问题。默认情况下,matplotlib轴标签和图例条目的权重似乎比轴刻度线重。是否有强制轴标签/图例条目与记号相同的重量 import matplotlib.pyplot as plt import numpy as np plt.rc('text',usetex=True) font = {'family':'serif','size':16} plt.rc('font',**font) plt.rc('legend',**{'fontsize'

我试图制作一些出版物质量的情节,但遇到了一个小问题。默认情况下,matplotlib轴标签和图例条目的权重似乎比轴刻度线重。是否有强制轴标签/图例条目与记号相同的重量

import matplotlib.pyplot as plt
import numpy as np

plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})

x = np.linspace(0,2*np.pi,100)
y = np.sin(x)

fig = plt.figure(figsize=(5,5))
p1, = plt.plot(x,y)
p2, = plt.plot(x,x**2)
plt.xlabel('x-Axis')
plt.ylabel('y-Axis')
plt.legend([p1,p2],['Sin(x)','x$^2$'])
plt.gcf().subplots_adjust(left=0.2)
plt.gcf().subplots_adjust(bottom=0.15)
plt.savefig('Test.eps',bbox_inches='tight',format='eps')
plt.show()
我可以使用数学模式,但问题(烦恼)是当我有一个句子作为标签时,即

plt.xlabel('$\mathrm{This is the x-axis}$') 
它把它挤在一起。我可以通过使用

plt.xlabel('$\mathrm{This\: is\: the\: x-axis}$')
但这需要很多标点符号。我希望有什么可以改变的,可以让我绕过
\mathrm{}
格式,使用标准的TeX格式

我尝试的另一个选项是使用
\text
而不是
\mathrm
,但是如果不加载包amsmath,Python的解释器似乎无法识别这一点。我也尝试过:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})
matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}']

x = np.linspace(0,2*np.pi,100)
y = np.sin(x)

fig = plt.figure(figsize=(5,5))
p1, = plt.plot(x,y)
p2, = plt.plot(x,x**2)
plt.xlabel(r'$\text{this is the x-Axis}$')
plt.ylabel('$y-Axis$')
plt.legend([p1,p2],['Sin(x)','x$^2$'])
plt.gcf().subplots_adjust(left=0.2)
plt.gcf().subplots_adjust(bottom=0.15)
plt.savefig('Test.eps',bbox_inches='tight',format='eps')
plt.show()
这也不会返回所需的结果。

如何:

import matplotlib.pyplot as plt
import numpy as np

plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})

x = np.linspace(0,2*np.pi,100)
y = np.sin(x)

fig = plt.figure(figsize=(5,5))
p1, = plt.plot(x,y)
p2, = plt.plot(x,x**2)
plt.xlabel('$\mathrm{This is the }x\mathrm{-axis}$'.replace(' ','\: '))
plt.ylabel('$y\mathrm{-axis}$')
plt.legend([p1,p2],['$\sin(x)$','$x^2$'], loc='best')
fig.subplots_adjust(left=0.2, bottom=0.15)
plt.savefig('Test.eps',bbox_inches='tight',format='eps')
plt.show()

这使用

plt.xlabel('$\mathrm{This is the }x\mathrm{-axis}$'.replace(' ','\: '))

将空格替换为
“\:”
。然而,特克斯大师可能会反对这一点。您可能想继续询问是否有更好的方法。

另一个答案提供了解决问题的方法。。。但是,这个问题非常特定于matplotlib和LateX后端的实现

首先,控制轴标签字体重量的
rc
参数是
'axes.labelweight'
,默认设置为
u'normal'
。这意味着标签应该已经处于正常重量

字体显示为粗体的原因如下所示:

  • 字体系列由
    'font.family'
    选择,对于OP,这是
    serif

  • 然后,对数组
    'font.
    (此处:
    font.serif
    )进行求值,并将所有字体的声明添加到LateX序言中。在这些声明中有一行

    \renewcommand{\rmdefault}{pnc}
    
    将默认设置为“新世纪教科书”

  • 总之,解决此问题的最短方法是将
    font.serif
    设置为仅包含计算机现代罗马:

    font = {'family':'serif','size':16, 'serif': ['computer modern roman']}
    
    这还有一个额外的好处,即它适用于所有元素,甚至适用于标签和其他标题-使用数学模式时没有肮脏的把戏:


    以下是生成绘图的完整代码:

    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rc('text',usetex=True)
    #font = {'family':'serif','size':16}
    font = {'family':'serif','size':16, 'serif': ['computer modern roman']}
    plt.rc('font',**font)
    plt.rc('legend',**{'fontsize':14})
    matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}']
    
    x = np.linspace(0,2*np.pi,100)
    y = np.sin(x)
    
    fig = plt.figure(figsize=(5,5))
    p1, = plt.plot(x,y)
    p2, = plt.plot(x,x**2)
    plt.xlabel(r'$\text{this is the x-Axis}$')
    plt.ylabel('$y-Axis$')
    plt.legend([p1,p2],['Sin(x)','x$^2$'])
    plt.gcf().subplots_adjust(left=0.2)
    plt.gcf().subplots_adjust(bottom=0.15)
    plt.savefig('Test.eps',bbox_inches='tight',format='eps')
    plt.show()
    

    你能把你用来绘图的代码贴出来吗?如果我理解正确,所有标签(轴和图例)的键入方式与
    ('label entry')
    类似,唯一的数学模式条目是y-label
    ('y-axis$')
    。如果是这样,那么这是一个伟大的解决方案!绘图完全是根据您的代码生成的,只更改了突出显示的行!我在尝试在matplotlib中获取LaTeX字体时遇到了这个答案。事实证明,我不得不用似乎具有正确效果的cmr10替换
    'computer modern roman'