背景
MatPlotLib 是一个很棒的图形包。但是当我有时需要用中文绘制数据集时。我发现了一些问题。
用MatPlotLib 表示非英文字体有两种方法。
方法一
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # YaHei is one common Chinese font
mpl.rcParams['axes.unicode_minus'] = False # Repair the bug of representing '-'as "square"
用这种方法,图中所有的文字和数字都是中文字体。
方法二
不同的是,我预先定义了一些中文字体的路径,需要使用的时候再调用。
from matplotlib.font_manager import FontProperties
chinese = FontProperties(fname=r'/Library/Fonts/Microsoft/SimHei.ttf', size=20)
ax = plt.gca()
ax.set_title(u'能量随时间的变化', fontproperties=chinese)
我的问题
当一个字符串同时包含中文和英文时(例如,中文作为变量,它应该带有一些单位:kg,m/s。)
质量 == Mass
as.set_xlabel(u'质量' + '(kg)') ==> Want to define their font sepearetly.
那么,我希望字符串可以和中英文字体混合在一起作为一个单元?
有可能实现吗?
最佳答案
- 我认为 Latex 是潜在的解决方案。在 LaTex 包中,xeCJK 是一个 提供中文、日文和韩文支持的软件包。你可以 阅读关于 Tex 的 matplotlib 文档。Matplotlib 可以使用 Tex render 文本和等式。事实上,这也是我的困境。和 上面的方法只是我的猜测。当然我还没有证明。
- 解决问题的另一种方法是使用一些支持中文和 英语。例如,SimHei 是一种合适的字体。我知道这是 中国纸质出版的妥协。
- 最后是来自 blog 的示例它使用 text() 来 在xlabel中指定中文和英文。
OK,我对方法一进行了一些试验,结果符合我的猜测。这是我的代码。
import matplotlib
mpl.use('pgf') # stwich backend to pgf
import matplotlib.pyplot as plt
plt.rcParams.update({
"text.usetex": True,# use default xelatex
"pgf.rcfonts": False,# turn off default matplotlib fonts properties
"pgf.preamble": [
r'\usepackage{fontspec}',
r'\setmainfont{Times New Roman}',# EN fonts Romans
r'\usepackage{xeCJK}',# import xeCJK
r'\setCJKmainfont{SimSun}',# set CJK fonts as SimSun
r'\xeCJKsetup{CJKecglue=}',# turn off one space between CJK and EN fonts
]
})
plt.rcParams['savefig.dpi']=300
plt.figure(figsize=(4.5, 2.5))
plt.plot(range(5))
plt.text(2.5, 2., "\CJKfontspec{SimHei}{黑体标注}")# Annotation by SimHei
plt.xlabel("宋体坐标标签(units)")# CJK&EN fonts mixed
plt.tight_layout(.5)
plt.savefig('examples.png')
关于python - MatPlotLib如何中英文混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008032/