Python 板


LINE

回应这个考古题一下 关於matplotlib显示中文的问题 引言中与其推文的大大们都提供了不错的解法 主要包含 详细档案的设定 与 pip install 两种方式 之前我也是一直用prop fontproperties等等在制图中一个个去处理中文问题 非常不方便 最近我以研究与练习的角度完成了「matplotlib-taiwan-font」 来跟大家推广一下 用法上跟Hsins大大(本篇引文)几乎一样 但我只包了台北黑体 实作上没有想太多 只希望能秀出中文而已 目前的安装方式(要有git…) pip install git+https://gitlab.com/scku208/matplotlib-taiwan-font 如果想用 pip install mpltw 请跟我说 有一个人附议我就回忆一下上传pypi的方法(还是有志者愿意代劳? (最)简易的使用范例 from mpltw import plt plt.plot([1,2,3]) plt.title('直接用中文') plt.show() 详细(其实也还好) 还请参考模组网址 https://gitlab.com/scku208/matplotlib-taiwan-font 本模组使用台湾制造的MIT LICENSE 欢迎直接拿去用(code其实只有10行左右...) 有任何安装或使用的问题 也欢迎任何方式的讨论 我要去画图啦~ 谢谢大家 ※ 引述《Hsins (迅雷不及掩耳盗铃)》之铭言: : tl;dr : 长话短说,我弄了个套件只要 import 就能够将思源繁中字体的三个常见字重和 : cwTeX 开源字体设定好,额外设定也不难。 : https://github.com/Hsins/mpl-tc-fonts : 有兴趣的可以慢慢看一下下面的内容,反正我礼拜一晚上追了一下,发现很多人 : 会随便乱设定跟书上乱讲是有情有可原的,并没有想像中容易。 : ---- : 上礼拜刚好有朋友又问到这个问题,索性就跑去看了一下 matplotlib 关於字体 : 设定部分的原始码。对整个 matplotlib 来说,字体渲染其实并不是一个那麽好 : 处理的部分,特别是当考虑到广大的中日韩字元(CJK characters)使用者的时 : 候... : 多数人卡关的其实是关於 matplotlib 字体缓存的部分,说穿了其实就是套件本 : 身会持有一个 FontList 去管理已知可用的字体,并且在自己的资料夹下面保有 : 字体档的缓存,但这样其实并不是一个节省空间的作法(系统字体仓库有一份, : 而我自己套件仓库下又多存一份),所以在 2.0.0版本之後提供了直接使用字体 : 档案路径,添加进 FontList 以便使用时查找。 : 不过这一个阶段又有人卡关了,因为必须提供字体档案的绝对路径,有一大部分 : 的使用者由於使用的作业系统有所不同,路径的表达方式也有所不同,这一个问 : 题在早期使用 os 套件库时会有些小问题,不过在 Python 3 之後提供了好用的 : pathlib 可以简单又优雅地处理路径在不同作业系统下表达方式不同的问题。 : 然而接下来又会撞到下一个关卡,就是设定 matplotlib 下绘图的字体设定,在 : 官方文件里面说: : You can explicitly set which font family is picked up for a given : font style (e.g., 'serif', 'sans-serif', or 'monospace'). : In the example below, we only allow one font family (Tahoma) for the : sans-serif font style. The default family is set with the font.family : rcparam, e.g. : ```python : rcParams['font.family'] = 'sans-serif' : ``` : and for the font.family you set a list of font styles to try to find : in order: : ```python : rcParams['font.sans-serif'] = ['Tahoma', 'DejaVu Sans', : 'Lucida Grande', 'Verdana'] : ``` : 问题到了这里,其实并没有解决!在这里上面的 'font.family' 是告诉绘图的 : 套件我可以选用哪些字体族,比如此处只从 'sans-serif' 字体族去找字体, : 於是我还必须在 'font.sans-serif' 字体族设定里面去添加我的中文字体才能 : 满足需求。 : 很多教学文章在这里就全部乱了套,这些文章东抄西抄大概也没有认真去看一下 : 问题到底在哪。比如把中文字体直接放在了 'font.family' 里面,又或者是没 : 有在 'font.family' 里面添加 'serif' 就把中文字体添加到 'font.serif' 中 : ,一点用处也没有。 : 然而即使把中文字体添加到上述的 'font.san-serif' 中了,问题也未必能够解 : 决!因为还有一个关卡就是在这个字体列表中的字体顺序。这边必须特别提出来 : 讲的原因就是 matplotlib 没有实作字体回退(font fallback) 的机制,然而 : 字体设定又给你一个列表,多数人会误以为这边的运作机制和浏览器中的字体设 : 定一样: : https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1279032453.A.80B.html : 不不不!并不是这样的,在 matplotlib 的认知里面,这个字体列表并不是用来 : 「依序套用」字体的顺序列表,是拿来「依序寻找」字体的顺序列表,所以如果 : 字体列表中的第一个字体能够在他维护的 FontList 中找到并且路径有效,就会 : 用从头到尾都用这个字体,如果这个字体是拉丁字符集,那麽遇到中日韩字符自 : 然会变成方块(也就是俗称的豆腐)。有兴趣帮忙实作的可以追一下这个 issue : : : https://github.com/matplotlib/matplotlib/issues/18883 : 最後还请大家帮我测试一下有没有什麽大问题 : 虽然没什麽技术含量的一个 package.... --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.120.190 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1619147323.A.B16.html ※ 编辑: KSJ (122.116.120.190 台湾), 04/23/2021 11:09:32
1F:推 taipoo: 好像不错,谢谢分享 04/23 11:29
2F:→ alvinlin: 不能直接去matplotlib告诉他们你们的套件在处理显示中文 04/23 12:10
3F:→ alvinlin: 上烂透了吗? 04/23 12:10
4F:推 Hsins: 实际上是因为他们的字体回退机制并不像网页那样,我有提 is 04/23 23:02
5F:→ Hsins: sue 但看起来并不是当前他们团队会处理的 04/23 23:02
6F:→ Hsins: https://git.io/JOM1T 04/23 23:02
7F:→ Hsins: 毕竟用免钱的,不用这麽凶去呛人吧… 04/23 23:03
8F:→ Hsins: 我自己是们心自问自己没时间也没办法独立尻出一个处理 CJK 04/23 23:06
9F:→ Hsins: 很优秀的绘图套件,或许觉得他们烂透的 2 楼可以试试 04/23 23:06
10F:→ Hsins: 如果要上 pypi 可能要先检查一下 package 大小,因为中文字 04/23 23:11
11F:→ Hsins: 体很肥,然後 pypi 有档案大小限制,如果太大的话要先推一 04/23 23:11
12F:→ Hsins: 板上去然後在 pypi 那边提 issue 请他们帮忙设定 04/23 23:11







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP