网上铺天盖地matplotlib字体教程,但是为啥我还要再写一个呢?

因为广大的科研人员的需求一般都是要求如下的格式:中文:宋体

英文:Times New Roman

公式:与英文配合

然而现有的问题如 用Python的matplotlib画图,怎么保证xlabel中中文用宋体,英文用新罗马? 也没有令人满意的方案。在探索了一段时间后,得到了两种解决方案,可以在同一行内采用不同的中英文以及公式字体。

现有的方法及问题如果直接设置中文字体,如在matplotlibrc里面修改font.serif: SimSun,则英文字体会被覆盖,因为中文字体中往往都自带英文字体,但大多比较丑。

如果设置usetex=Ture,即调用外部tex程序来渲染,则会因为调用的是pdflatex而显示不了中文。

所以针对这两种方法的问题,分别有对应的解决方案:

使用内置tex

Matplotlib(下称mpl)自带tex引擎,可以解析并显示Latex字符串。虽然中文会覆盖英文字体,但是mpl的数学字体和一般的text字体是独立的,所以我们可以把文字放到Latex字符串里面,并使用\mathrm{text}来使其显示为正体。

mpl自带有几种数学字体,最常用的有cm系列和stix系列,前者是Latex默认的数学字体,而stix的正体和Times New Roman差别很小,一般用来和Times New Roman搭配。所以这里我们采用stix,即可达到相同的视觉效果。

代码如下:

import matplotlib.pyplot as plt

from matplotlib import rcParams

config = {

"font.family":'serif',

"font.size": 20,

"mathtext.fontset":'stix',

"font.serif": ['SimSun'],

}

rcParams.update(config)

plt.title(r'宋体 $\mathrm{Times \; New \; Roman}\/\/ \alpha_i > \beta_i$')

plt.axis('off')

plt.savefig("usestix.png")

结果如图:

使用外部tex

因为pdflatex对unicode的支持不太好,用不了中文,但是可以使用xelatex。mpl中使用xelatex的方法为改用pgf后端,pgf后端还支持lualatex。在pgf后端中,可以通过设置pgf.preamble来在latex中设置所需要的字体。

在xelatex中可以分别对中英文以及公式字体进行修改,其中中文需要使用xeCJK宏包,公式则使用unicode-math宏包,但是使用了默认的公式字体。这里的英文是真Times New Roman,并非如前一种方法中是用了stix字体,当然这里也可以使用相同的设置。

update:由于之前有知友问如何在公式里面支持中文,这个需求其实是Latex的问题,和本文主题有点偏。不过也在这里说一下吧,这种需求需要在使用xeCJK宏包后开启CJKmath的选项,即\xeCJKsetup{CJKmath=true}。

代码如下:

import matplotlib

import matplotlib.pyplot as plt

from matplotlib import rcParams

matplotlib.use("pgf")

pgf_config = {

"font.family":'serif',

"font.size": 20,

"pgf.rcfonts": False,

"text.usetex": True,

"pgf.preamble": [

r"\usepackage{unicode-math}",

#r"\setmathfont{XITS Math}",

# 这里注释掉了公式的XITS字体,可以自行修改

r"\setmainfont{Times New Roman}",

r"\usepackage{xeCJK}",

r"\xeCJKsetup{CJKmath=true}",

r"\setCJKmainfont{SimSun}",

],

}

rcParams.update(pgf_config)

plt.title(r"宋体 Times New Roman $\alpha_{一}> \beta_{二}$")

plt.axis('off')

plt.savefig("usetex.png")

结果如图:

python 绘图英文字体_Matplotlib 中英文及公式字体设置相关推荐

  1. python 绘图英文字体_如何在matplotlib和networkx中显示非英语字体?

    这是这个question的后续问题.因为它解决了一个更一般的问题,所以我把它作为一个新的问题.在 我有一个网络,其中节点的标签是波斯语(阿拉伯语字母表).当我试图使用networkx来显示我的网络时, ...

  2. python绘图没有红色_Matplotlib 3D散点颜色在红色后丢失

    目前还不清楚为什么会发生这种情况,这肯定是一个bug.在这里,我提供了一个方法来获得您想要的结果,尽管它并不像人们希望的那样自动.在 由于某些原因,表示散布点的Patch3DCollection在第一 ...

  3. 关于python的英文参考文献_中英文参考文献

    参考文献 [1] 许永兵 , 朱方正 . 城市过江通道的建设和发展分析 [J]. 公路与汽运 , 2010(2):39-41. [2] 杨新安 , 孙经川 , 孟凡江 . 桥梁还是隧道 [J]. 徐州 ...

  4. Python绘图时将字体改为新罗马字体的方法

    Python绘图时文字改为新罗马字体 font = {'family': 'serif', 'serif': 'Times New Roman', 'weight': 'normal', 'size' ...

  5. python 绘图-不同的中文字体汇总

    在python 绘图中,经常会出现设置标题或者x.y轴标签时,中文不显示的问题.常常需要一行代码实现以上功能,特此,总结了一些常用的中文字体,以便以后绘图方便使用: import matplotlib ...

  6. python matplotlib设置字体_Matplotlib中修改字体属性

    字体的修改在作图中也是一项重要的工作,如果图片默认字体一致,那么可以直接修改配置文件,把字体的格式固定下来.但是很多时候,我们需要对字体精确地控制.在不同的地方用不同的字体,风格,大小,颜色等等,那么 ...

  7. R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  8. python 柱状图 间距_专题第18篇:Python 绘图入门

    我的施工之路 1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编程风格专题7函数使用8面向对象编程(上篇)9面向对象编程(下篇)10十大数据结构11包和模块使用总结12Python正则专 ...

  9. python画建筑_专题 | Python 绘图入门

    我的施工之路 Python 绘图入门 这是施工系列第18篇,同时也进入到一个新的阶段:Python绘图篇.作为绘图模块的第一篇,与大家一起过过最基本的Python绘图原理. 掌握基本的绘图原理很有必要 ...

  10. python中英文字符怎么区分-python 利用utf-8编码判断中英文字符的简单示例

    这篇文章主要为大家详细介绍了python 利用utf-8编码判断中英文字符的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣python 利用utf-8编码判断中英文字符的简单示例的小伙伴,下 ...

最新文章

  1. 设计模式 之美 -- 建造者模式
  2. linux运维如何月薪过万?(收藏自用)
  3. c#竖直射线法判断点是否再多边形里面
  4. Tomcat tomcat-users.xml详解
  5. VSCode 更新后打不开之解决办法
  6. PHP二维数组去重(指定键名)
  7. 可以批量修改文件名、文件后缀的实用工具
  8. JDBC中的Statement和PreparedStatement的区别
  9. Vrep当中的一些好用的工具(未完)
  10. 解决sklearn.metrics指标报错ValueError: Target is multiclass but average=‘binary‘. Please choose anothe...
  11. 目录代码php_php获取某个目录大小的代码
  12. [再学Python] - 面向对象的程序设计- 对象和类
  13. 使用Fiddler进行http抓包和调试
  14. VMware安装linux镜像
  15. 若干小球碰撞的一种暴力解题法
  16. 谷歌地图解析及ArcEngine加载谷歌地图方法
  17. 82ip网 - 每日更新50万HTTP和HTTPS代理IP!
  18. S2ANet(Align Deep Features for Oriented Object Detection)解读
  19. 综合素质——作文——规则意识、人品教育、自信、用于探索、开拓前行;
  20. 记一次addClass is not a function情况

热门文章

  1. Python xlwt 操作 excel 表格基础(一):单元格写入、合并、插入位图等
  2. 开源在线客服系统源码h5|thinkphp在线客服完整源码|网页在线客服源码
  3. PHP响应式营销型万能H5建站系统源码
  4. (转载)New poker 2总算放出新固件了!
  5. 过滤文本或字符串中的emoji表情(包括微信自带表情处理)
  6. 用人机对话系统设计逻辑探究人工智能产品经理
  7. 常用的并发测试工具及压测方法
  8. 面经整理:大华C++服务器开发(2021-07-19)
  9. 2021计算机专业考研科目,2021北京航空航天大学计算机考研科目
  10. 央行数字货币:第三方支付产业新变量