ermutuxia

2020-08-18   阅读量: 12243

python 可视化 画图

用python matplotlib进行画图的时候如何将中文字体设定成电脑上的指定字体和指定字号大小?

扫码加入数据分析学习群
import matplotlib as mpl
import matplotlib.pyplot as plt
zhfont1 = mpl.font_manager.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.TTF',size=50)
zhfont2 = mpl.font_manager.FontProperties(fname=r'C:\Windows\Fonts\STCAIYUN.TTF',size=100)
fig,ax1=plt.subplots()
ax1.bar(["a","b","c"],[1,2,3])
ax1.set_ylabel(u'演示中文字体1',fontproperties=zhfont1)
ax1.set_xlabel(u"演示华文彩云",fontproperties=zhfont2)

image.png

想学习更多可以自己查阅python帮助文件

help(mpl.font_manager.FontProperties)

Help on class FontProperties in module matplotlib.font_manager:


class FontProperties(builtins.object)

| FontProperties(family=None, style=None, variant=None, weight=None, stretch=None, size=None, fname=None)


相关链接:

https://www.pinggu.com/post/details/5f3ca5fa49796226c2293a80

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
21.1844 5 31 关注作者 收藏

评论(20)

wangxishi
2020-08-19

好的,中文字体可用的实在有限啊,这个包还会更新吗

105.6867 2 0 回复
ermutuxia
2020-08-19

如果你只有英文的话,可以随意设定一些英文字体。

39.2785 1 0 回复
ermutuxia
2020-08-19
如果你里面有中文的话只能用下面的命令了
plt.rcParams['font.sans-serif'] = ['SimHei']


39.2785 1 0 回复
wangxishi
2020-08-19

如果想直接改变整个图表的所有字体,不只单改标题的字体,怎么改代码比较方便呢

0.0000 0 0 回复
wangxishi
2020-08-19
ax1.set_title("score1",fontsize=80,fontname='Computer Modern Sans Serif')

这行代码,然后下图是效果

1.png

39.2785 1 0 回复
ermutuxia
2020-08-19

你给坐标系加了一个标题,给图纸加了一个标题,所以两个标题可能重叠在一起,你只需要加一个标题就行

ax1.set_title #给坐标系加标题

fig.suptitle #给图纸(画布)加标题

你先去掉一个标题再运行

39.2887 2 0 回复
ermutuxia
2020-08-19

把你的命令贴一下

0.0000 0 0 回复
wangxishi
2020-08-19

我按照您说的思路,删除了之前定义字体的那行代码,然后想更改图表的字体,不明白为什么出来的图是这样:

1,标题虽然成功出来了,但是依然有报错提示

2,原来的标题依然还在


37.0434 1 0 回复
ermutuxia
2020-08-19

想到一起了

0.0000 0 0 回复
wangxishi
2020-08-19

如果想要用其他字体的话,应该怎么在现有基础上做改动呢

0.0000 0 0 回复
ermutuxia
2020-08-19


用下面这种方式设定要添加的标题字体也比较方便。设定的合适的话也不会出现乱码,但是April这个字体还是不能正确显示。

import matplotlib as mpl

import matplotlib.pyplot as plt


fig,ax1=plt.subplots()

ax1.bar(["a","b","c"],[1,2,3],color='r')


ax1.plot(["a","b","c"],[1,2,3],color=(0,0,0,1),linewidth=10)

ax1.set_title("测试标题",fontsize=80,fontname="April")



#在坐标系的指定位置添加一些文本

ax1.text(0,1,'1黑体',fontsize=40,fontname="SimHei",rotation=0,va="bottom")

#前面两个参数是文字的位置,第一个参数是x坐标,第二个参数是y坐标。

ax1.text(1,1,'2宋体',fontsize=40,fontname="SimSun",rotation=0,va="bottom")

ax1.text(0,2,'3楷体',fontsize=40,fontname="KaiTi",rotation=0,va="bottom")

ax1.text(1,2,'4微软雅黑',fontsize=40,fontname="Microsoft Yahei",rotation=0,va="bottom")

image.png


0.0102 1 0 回复
ermutuxia
2020-08-19

问:试了'font.serif'的所有字体,没有一个可以用

答:我试了一下通过下面的方式定义中文字体的话,只能设定为SimHei,设定为其他字体的话都是不能正常显示汉字的。

plt.rcParams['font.sans-serif'] = ['Arial']  显示错误
plt.rcParams['font.sans-serif'] = ['SimHei']  显示正确


你要用这样的方式设定中文字体不能设定为其他,只能设定为SimHei字体。

0.0000 0 0 回复
wangxishi
2020-08-19

试了'font.serif'的所有字体,没有一个可以用

0.0000 0 0 回复
ermutuxia
2020-08-19

问:我试了好几个字体,发现除了您最开始写的代码里面的'Simhei'字体外,其他字体基本都不支持,这个情况正常吗?

回复:是的出现这种情况是正常的,很多付费软件都有这个问题,中文很多格式没法设定只能设定一种或几种。你都试了哪些格式?列一下

0.0000 0 0 回复
wangxishi
2020-08-19

我试了好几个字体,发现除了您最开始写的代码里面的'Simhei'字体外,其他字体基本都不支持,这个情况正常吗?

0.0000 0 0 回复
ermutuxia
2020-08-19

image.png

0.0000 0 0 回复
ermutuxia
2020-08-19

问:

比如我想用'font.sans-serif'里面的'Arial'字体,那么我这么写代码的话:

plt.rcParams['font.sans-serif'] = ['Arial']

会报错,报错如下:想问下是我写的代码有问题吗?

答:

你代码没有问题是matplotlib库自身对中文的兼容问题,对一些特殊中文字体不支持,而恰好Arial就属于其中一个,所以你只能设定成其他字体。等几个月之后有可能维护matplotlib库的人员更新包的版本后会把这个功能完善好。

0.0000 0 0 回复
wangxishi
2020-08-19

比如我想用'font.sans-serif'里面的'Arial'字体,那么我这么写代码的话:

plt.rcParams['font.sans-serif'] = ['Arial']

会报错,报错如下:想问下是我写的代码有问题吗?1.png

0.0000 0 0 回复
ermutuxia
2020-08-18
我试了下,你如果想用微软雅黑只能用下面的命令,用其他命令出现的结果是不对的。
matplotlib这个库的中文文字定义部分是存在一些漏洞的。有的方法不一定能实现一些特殊的情况

import matplotlib as mpl
import matplotlib.pyplot as plt
微软雅黑普通 = mpl.font_manager.FontProperties(fname=r'C:\Windows\Fonts\msyh.TTF',size=50)
微软雅黑加粗 = mpl.font_manager.FontProperties(fname=r'C:\Windows\Fonts\msyh.TTF',size=50)
fig,ax1=plt.subplots()
ax1.bar(["a","b","c"],[1,2,3])
ax1.set_ylabel(u'演示中文字体1',fontproperties=微软雅黑普通)
ax1.set_xlabel(u'演示中文字体2',fontproperties=微软雅黑加粗)


image.png


0.0000 0 0 回复
ermutuxia
2020-08-18
import matplotlib as mpl
import matplotlib.pyplot as plt
#设定中文字体
plt.rcParams['font.sans-serif'] = ['STCAIYUN'] 

fig,ax1=plt.subplots()
ax1.bar(["a","b","c"],[1,2,3],color='r')
#画柱形图的时候可以通过color参数设定颜色,"r"是红色的简称
ax1.bar(["a","b","c"],[0.5,1,1.5],color='b')
#"b"是蓝色的简称
#还可以这样设定,用四个数字指定,四个数字分别是,r饱和度,g饱和度,b饱和度,透明度
ax1.bar(["a","b","c"],[0.4,0.8,1],color=(1,0.5,0.5,0.8))
#如何想要配色好看,则需要一些美学知识。

#折线图颜色设定是一样的
ax1.plot(["a","b","c"],[1,2,3],color=(0,0,0,1),linewidth=10)
ax1.set_title("测试标题",fontsize=80)

你通过rcParams修改了默认字体后,如果改的字体比较奇怪画出来的图形就会很奇怪,所有的文字和数字都会变成这个字体。


image.png

0.0000 0 0 回复
12>

推荐课程

推荐帖子