在Matplotlib中使用stix字体制作一个斜体和粗体样式的标签

q5lcpyga  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(118)

我试图用matplotlib生成一个图,我使用'stix'字体(rcParams 'mathtext. fontset ']= ' stix '),以便从文本到数学文本有平滑的字体大小过渡。然而,我的一些数学符号我想用斜体(标量值)和一些斜体AND粗体(Tensor)我不想通过使用乳胶渲染的解决方案,因为其他事情都搞砸了。
我将给予你一个小例子来描述这个问题:

from numpy import *
from matplotlib.pyplot import * 

# Chaning font to stix
rcParams['mathtext.fontset'] = 'stix'

# Some data to constract this plotting example
datax=[0,1,2]
datay=[8,9,10]
datay2=[8,15,10]

fig, ay = subplots()

ay.plot(datax, datay, color="0.", ls='-', label= r"$F_{\alpha}$")
ay.plot(datax, datay2, color="0.", ls='-', label=r"$\mathbf{F_{\alpha}}$")

# Now add the legend with some customizations.
legend = ay.legend(loc='left', shadow=True)

#frame = legend.get_frame()
#frame.set_facecolor('0.90')
xlabel(r"x label",fontsize=18)
ylabel(r'y label', fontsize=18)
grid()

show()

如果你运行代码,第一个标签是斜体,第二个标签是粗体。我如何才能实现第二个标签是粗体和斜体?
Problem with math text to be Italic and bold

xkrw2x1b

xkrw2x1b1#

需要一些更具体的mathtext参数:

from numpy import *
from matplotlib.pyplot import *

# Changing font to stix; setting specialized math font properties as directly as possible
rcParams['mathtext.fontset'] = 'custom'
rcParams['mathtext.it'] = 'STIXGeneral:italic'
rcParams['mathtext.bf'] = 'STIXGeneral:italic:bold'

# Some data to construct this plotting example
datax=[0,1,2]
datay=[8,9,10]
datay2=[8,15,10]

fig, ay = subplots()

ay.plot(datax, datay, color="0.", ls='-', label= r"$\mathit{F_{\alpha}}$")
ay.plot(datax, datay2, color="0.", ls='-', label=r"$\mathbf{F_{\alpha}}$")

# Now add the legend with some customizations.
legend = ay.legend(loc='left', shadow=True)

# Using the specialized math font again
xlabel(r"$\mathbf{x}$ label",fontsize=18)
ylabel(r'y label', fontsize=18)
grid()

show()

请注意,我在轴标签中也使用了mathbf。可能会将标签的其余部分更改为STIX字体,您可以定义非斜体-非粗体的情况:请参阅“自定义字体”下的docs
matplotlib Gallery中至少有两个例子可能会有所帮助:一个是字体家族,另一个是提醒我们哪些是STIX字体。

cczfrluj

cczfrluj2#

从matplotlib 3.8版本开始,有\mathbfit命令:

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = 'Nimbus Roman'
plt.rcParams['mathtext.fontset'] = 'stix'

fig, ax = plt.subplots()
ax.plot([], label= r"italic (default): $F_\alpha$")
ax.plot([], label=r"roman: $\mathrm{F_\alpha}$")
ax.plot([], label=r"bold: $\mathbf{F_\alpha}$")
ax.plot([], label=r"bold and italic: $\mathbfit{F_\alpha}$")
ax.legend(fontsize='xx-large')

ahy6op9u

ahy6op9u3#

所以MatplotLib使用LaTeX语法,所以我最好的猜测是,你可以使用LaTeX语法来获得斜体和粗体,这是

\textbf{\textit{text}}

所以在你的情况下

ay.plot(datax, datay2, color="0.", ls='-', label= r"$\mathbf{ \textit{F_{\alpha}} }$")

相关问题