python - MatPlotLib如何中英文混合

标签 python matplotlib fonts

背景

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.

那么,我希望字符串可以和中英文字体混合在一起作为一个单元?

有可能实现吗?

最佳答案

  1. 我认为 Latex 是潜在的解决方案。在 LaTex 包中,xeCJK 是一个 提供中文、日文和韩文支持的软件包。你可以 阅读关于 Tex 的 matplotlib 文档。Matplotlib 可以使用 Tex render 文本和等式。事实上,这也是我的困境。和 上面的方法只是我的猜测。当然我还没有证明。
  2. 解决问题的另一种方法是使用一些支持中文和 英语。例如,SimHei 是一种合适的字体。我知道这是 中国纸质出版的妥协。
  3. 最后是来自 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')

examples

关于python - MatPlotLib如何中英文混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008032/

相关文章:

python - 模块未找到错误 : No module named 'tensorflow.examples'

python - IPython.html.widgets 在 IPython 中说 : no module named widgets

python - Tweepy exists_friendship 不存在?

python - 使用 matplotlib.pyplot (Python) 绘制椭圆

python - 如何使用不同列中的值和文本注释分组条

python - 解析 XML 文件以获取所需数据并将其存储在 Python 中的 mongodb 数据库中

python - 如何从 ASCII 文件绘制波长与通量的关系图

android - android中使用xml的新自定义字体方法

java - 当我从 Netbeans 运行 JFrame 程序时,印地语字体可见,但在运行 .jar 文件时不可见

fonts - Font Awesome,是否可以在没有完整 CDN 加载或完整本地脚本的情况下仅将一个或两个图标加载到站点上?