Python编程:解决matplotlib绘图中文乱码问题

简介: Python编程:解决matplotlib绘图中文乱码问题

测试环境:


mac

python3

先查看本机支持的字体



# 显示可以用的中文字体
from matplotlib.font_manager import FontManager
import subprocess
def show_can_use_font():
    # all font list get from matplotlib.font_manager:
    mpl_fonts = set(f.name for f in FontManager().ttflist)
    # for python2
    # output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
    # for python3
    # Chinese font list get from fc-list
    output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True, encoding="utf8")
    zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n'))
    # the fonts we can use:
    available = set(mpl_fonts) & set(zh_fonts)
    for f in available:
        print('\t', f)
if __name__ == '__main__':
    show_can_use_font()

运行以上脚本,得到可以使用的字体

LiSong Pro
.LastResort
Arial Unicode MS
LiHei Pro
Wawati SC
Wawati TC
STFangsong
STHeiti

将上面的字体设置到rcParams就可以正常显示中文

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置字体
rcParams["font.family"]="STHeiti"
rcParams["font.size"]= 8
path = "data/总人口.txt"
data = pd.read_csv(path, sep=" ")
data = pd.DataFrame(data)
x = data.ix[4].keys()[1:]
y = data.ix[4].values[1:]
print(x)
print(y)
"""
Index(['2016年', '2015年', '2014年', '2013年', '2012年', '2011年', '2010年', '2009年',
       '2008年', '2007年'],
      dtype='object')
[58973 60346 61866 62961 64222 65656 67113 68938 70399 71496]
"""
plt.plot(x, y)
plt.title("乡村人口(万人)")
plt.xlabel("时间(年)")
plt.ylabel("人口(万人)")
plt.show()

image.png

附件:

data/总人口.txt


指标 2016年 2015年 2014年 2013年 2012年 2011年 2010年 2009年 2008年 2007年
年末总人口(万人) 138271 137462 136782 136072 135404 134735 134091 133450 132802 132129
男性人口(万人) 70815 70414 70079 69728 69395 69068 68748 68647 68357 68048
女性人口(万人) 67456 67048 66703 66344 66009 65667 65343 64803 64445 64081
城镇人口(万人) 79298 77116 74916 73111 71182 69079 66978 64512 62403 60633
乡村人口(万人) 58973 60346 61866 62961 64222 65656 67113 68938 70399 71496

相关文章
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
292 102
|
3月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
314 104
|
3月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
262 103
|
3月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
193 82
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
180 3
|
2月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
436 3
|
2月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
266 3
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
266 0
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的多面手
Python:现代编程的多面手
84 0
|
3月前
|
存储 人工智能 算法
Python实现简易成语接龙小游戏:从零开始的趣味编程实践
本项目将中国传统文化与编程思维相结合,通过Python实现成语接龙游戏,涵盖数据结构、算法设计与简单AI逻辑,帮助学习者在趣味实践中掌握编程技能。
336 0

推荐镜像

更多