matplotlib 如何在Python中以数学形式更改$$中的字体

68bkxrlz  于 2023-10-24  发布在  Python
关注(0)|答案(3)|浏览(157)

当我尝试用matplotlib绘制一个图形时,我在x轴的标签上写了文字和“数学文本”。因为我必须在标签上写一个化学公式,所以它被写为“$CO_2$concentration”。问题是我希望字体应该是times new roman,但我无法改变美元符号的字体。有没有人可以帮助我解决这个问题?非常感谢!

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

xf1 = pd.read_excel('1812_GPT.xlsx',sheetname= 'PVD_CO2CH4_600',usecols=[1])
deltapx1 = pd.read_excel('1812_GPT.xlsx',sheetname= 'PVD_CO2CH4_600',usecols=[3])
Px1 = pd.read_excel('1812_GPT.xlsx',sheetname= 'PVD_CO2CH4_600',usecols=[5])

ax1 = plt.subplot(111) 

l1, = ax1.plot(xf1,Px1,'s',markerfacecolor='black')

font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 14,
 }

ax1.set_xlabel(r'$CO_2$ pressure', font1)
ax1.set_ylabel(r'$CO_2$ concentration', font1)

plt.show()

这是图片链接,你可能会看到图片,发现“二氧化碳”是不是在时代新罗马。https://flic.kr/p/2dmh8pj

ztigrdn8

ztigrdn81#

我不认为将任何mathtext更改为任意字体是容易的。然而,如果"CO_2"仅由常规符号组成,您可以使用\mathdefault{}使mathtext使用常规字体中的符号。

import matplotlib.pyplot as plt

plt.rcParams["font.family"] = "serif"
plt.rcParams["font.serif"] = ["Times New Roman"] + plt.rcParams["font.serif"]

fig, ax = plt.subplots()

ax.set_xlabel(r'$\mathdefault{CO_2}$ pressure')
ax.set_ylabel(r'$\mathdefault{CO_2}$ concentration')

plt.show()

r"$\mathdefault{\sum_\alpha^\beta\frac{i}{9}}$这样的东西仍然会以通常的默认数学字体呈现(除了"i"9,它们当然存在于Times New Roman中)。

对于一般情况,您也可以将完整的数学字体集更改为任何可用的cmstixstixsansdejavuserifdejavusans。最接近“Times New Roman”的是stix

import matplotlib.pyplot as plt

rc = {"font.family" : "serif", 
      "mathtext.fontset" : "stix"}
plt.rcParams.update(rc)
plt.rcParams["font.serif"] = ["Times New Roman"] + plt.rcParams["font.serif"]

fig, ax = plt.subplots()

ax.set_xlabel(r'$CO_2$ pressure')
ax.set_ylabel(r'$CO_2$ concentration')

plt.show()

阅读的一般建议是MathText tutorial

0dxa2lsx

0dxa2lsx2#

我发现一次定义整个字体家族比单独定义要好(假设你想要相同的字体)。

plt.rc('text', usetex=True )
plt.rc('font', family='Times New Roman', weight='normal', size=14)
plt.rcParams['mathtext.fontset'] = 'Times New Roman'
ax1.set_xlabel('$CO_2$ pressure')
ax1.set_ylabel('$CO_2$ concentration')
rbpvctlc

rbpvctlc3#

import matplotlib.pyplot as plt

plt.rcParams['mathtext.fontset'] = 'custom'
plt.rcParams['mathtext.rm'] = 'Times New Roman'
plt.rcParams['font.family'] ='Times New Roman'

在这种情况下,数学文本字体将根据自定义字体的数学文本文档进行自定义。这有其自身的限制,但在您的基本情况下,将按预期工作。
x轴的代码如下:ax1.set_xlabel(r'$\mathrm{CO_2}$ pressure'),无需在标签中指定。
注意事项:在这个场景中,我没有指定一个后备字体,这在更复杂的字符情况下可能是必要的。在上面链接的文档中有解释。

相关问题