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天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
16 5
|
6天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
|
6天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
27 2
|
11天前
|
Python
在Python中绘制K线图,可以使用matplotlib和mplfinance库
使用Python的matplotlib和mplfinance库可绘制金融K线图。mplfinance提供便利的绘图功能,示例代码显示如何加载CSV数据(含开盘、最高、最低、收盘价及成交量),并用`mpf.plot()`绘制K线图,设置类型为'candle',显示移动平均线(mav)和成交量信息。可通过调整参数自定义图表样式,详情参考mplfinance文档。
30 2
|
12天前
|
测试技术 调度 索引
python编程中常见的问题
【4月更文挑战第23天】
32 2
|
12天前
|
Serverless Python
使用Python的pandas和matplotlib库绘制移动平均线(MA)示例
使用Python的pandas和matplotlib库绘制移动平均线(MA)示例:加载CSV数据,计算5日、10日和20日MA,然后在K线图上绘制。通过`rolling()`计算平均值,`plot()`函数展示图表,`legend()`添加图例。可利用matplotlib参数自定义样式。查阅matplotlib文档以获取更多定制选项。
28 1
|
13天前
|
数据可视化 API Python
Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)
Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)
|
13天前
|
数据可视化 Linux API
Python绘图工具seaborn,教会你如何绘制更加精美的图形(一)
Python绘图工具seaborn,教会你如何绘制更加精美的图形(一)
|
13天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
13天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver