Rumah pembangunan bahagian belakang Tutorial Python 分享一篇Linux系统下python matplotlib画图的中文显示实例

分享一篇Linux系统下python matplotlib画图的中文显示实例

May 18, 2018 pm 03:21 PM
linux python kongsi sistem

这篇文章主要介绍了解决Linux系统中python matplotlib画图的中文显示问题,需要的朋友可以参考下

最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些初步的数据挖掘和分析。

在使用matplotlib画图时,横坐标为中文,但是画出的条形图横坐标总是显示“框框”,就去查资料解决。感觉这应该是个比较常见的问题,网上的中文资料也确实很多,但是没有任何一个彻底解决了我遇到的问题。零零碎碎用了快3个小时的时间,才终于搞定。特此分享,希望能帮到有同样问题的童鞋。

运行环境:

  • python2.7

  • Linux Centos7

  • 用conda安装的matplotlib和pandas

问题:

  • matplotlib画图,无法显示中文

问题原因:

  • linux操作系统以及matplotlib的字体库中,没有可用的中文字体

  • matplotlib包默认只支持ASCII码,不支持unicode码

网上资料总结:

  • 修改matplotlib的资源配置文件,例如增加"Simhei"字体(这个字体并不是所有的linux系统都有的好嘛!修改了并没有作用)

  • 给linux安装中文字体,并修改matplotlib的资源配置文件。(呵呵,并没有作用)

解决方案:

其实也是综合了网上的各种解决方案。总体说来有以下几个步骤:

1. 获取matplotlibrc文件所在路径。在jupyter notebook中获取:

import matplotlib
matplotlib.matplotlib_fname()
Salin selepas log masuk

例如,我的这个文件在:

u'~/miniconda2/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc'
Salin selepas log masuk

后续步骤会修改此文件中的font参数。

2. 看看系统中的所有字体,以及可用的中文字体。也是在jupyter nb中:

from matplotlib.font_manager import FontManager
import subprocess
fm = FontManager()
mat_fonts = set(f.name for f in fm.ttflist)
print mat_fonts
output = subprocess.check_output(
  'fc-list :lang=zh -f "%{family}\n"', shell=True)
print '*' * 10, '系统可用的中文字体', '*' * 10
print output
zh_fonts = set(f.split(',', 1)[0] for f in output.split('\n'))
available = mat_fonts & zh_fonts
print '*' * 10, '可用的字体', '*' * 10
for f in available:
  print f
Salin selepas log masuk

做完上述操作,会发现“可用的字体”这里为空。因为没有中文字体给matplotlib用(所以才会中文都显示“框框”)

3. 假设操作系统中没有中文字体。此时下载一个ttf中文字体,并在cenos中安装。要安装那种系统能检测font-family的,否则无效。我在这个网站下载的:http://font.chinaz.com/130130474870.htm

解压rar文件。在 /usr/share/fonts 路径下创建存放此字体的文件夹yourfontdir,并下载的ttf文件复制到yourfontdir中(可以给文件改个英文名,方便操作)

4. 给cenos安装这个字体。

cd /usr/share/fonts/yourfontsdir
#生成字体索引信息. 会显示字体的font-family
sudo mkfontscale
sudo mkfontdir
#更新字体缓存:
fc-cache
Salin selepas log masuk

5. 修改matplotlibrc文件

修改步骤1中获取的matplotlibrc文件配置。

将font.family 部分注释去掉,并且在font.serif 支持字体加上一个中文字体。这里就加上刚才下载的中文字体的font-family. 可以通过 fc-list 命令查找一下(所以前面最好记下来)。我这里增加的是"WenQuanYi Zen Hei Mono"字体。

下面这句注释要去掉,不然中文减号也显示方块:

axes.unicode_minus : False
Salin selepas log masuk

6. 这一步骤最重要!为matplotlib增加中文字体

完成步骤5后,再操作步骤2,会发现“可用的中文字体”已经有了刚才安装的字体,但是画图仍然不能显示中文。这是因为你这个字体给centos安装了、也告诉matplotlib要用这个字体了,但是,matplotlib找不到这个字体的ttf文件啊。。。。所以需要给它弄一个。

将下载的ttf字体复制一份到以下路径:

~/miniconda2/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf
Salin selepas log masuk

删除相关cache。在以下路径:

~/.cache/matplotlib
Salin selepas log masuk

删除其中与字体有关的cache

7. 现在重新画个图试试。搞定。

Atas ialah kandungan terperinci 分享一篇Linux系统下python matplotlib画图的中文显示实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah yang paling banyak digunakan Linux? Apakah yang paling banyak digunakan Linux? Apr 09, 2025 am 12:02 AM

Linux digunakan secara meluas dalam pelayan, sistem tertanam dan persekitaran desktop. 1) Dalam bidang pelayan, Linux telah menjadi pilihan yang ideal untuk menganjurkan laman web, pangkalan data dan aplikasi kerana kestabilan dan keselamatannya. 2) Dalam sistem tertanam, Linux popular untuk penyesuaian dan kecekapan yang tinggi. 3) Di persekitaran desktop, Linux menyediakan pelbagai persekitaran desktop untuk memenuhi keperluan pengguna yang berbeza.

Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Apr 08, 2025 pm 09:39 PM

Tidak mustahil untuk melihat kata laluan MongoDB secara langsung melalui Navicat kerana ia disimpan sebagai nilai hash. Cara mendapatkan kata laluan yang hilang: 1. Tetapkan semula kata laluan; 2. Periksa fail konfigurasi (mungkin mengandungi nilai hash); 3. Semak Kod (boleh kata laluan Hardcode).

Soalan Temuduga Centos: Ace Temu ramah Pentadbir Sistem Linux Anda Soalan Temuduga Centos: Ace Temu ramah Pentadbir Sistem Linux Anda Apr 09, 2025 am 12:17 AM

Soalan dan jawapan yang sering ditanya kepada wawancara CentOS termasuk: 1. Gunakan perintah YUM atau DNF untuk memasang pakej perisian, seperti Sudoyumininstallnginx. 2. Menguruskan pengguna dan kumpulan melalui perintah UserAdd dan GroupAdd, seperti SudouserAdd-M-S/Bin/BashNewuser. 3. Gunakan firewalld untuk mengkonfigurasi firewall, seperti Sudofirewall-CMD-Permanent-ADD-Service = HTTP. 4. Tetapkan kemas kini automatik untuk menggunakan yum-cron, seperti Sudoyumininstallyum-Cron dan konfigurasi apply_updates = ya.

Cara Menggunakan AWS Glue Crawler dengan Amazon Athena Cara Menggunakan AWS Glue Crawler dengan Amazon Athena Apr 09, 2025 pm 03:09 PM

Sebagai profesional data, anda perlu memproses sejumlah besar data dari pelbagai sumber. Ini boleh menimbulkan cabaran kepada pengurusan data dan analisis. Nasib baik, dua perkhidmatan AWS dapat membantu: AWS Glue dan Amazon Athena.

Operasi Linux Utama: Panduan Pemula Operasi Linux Utama: Panduan Pemula Apr 09, 2025 pm 04:09 PM

Pemula Linux harus menguasai operasi asas seperti pengurusan fail, pengurusan pengguna dan konfigurasi rangkaian. 1) Pengurusan Fail: Gunakan arahan MKDIR, Touch, LS, RM, MV, dan CP. 2) Pengurusan Pengguna: Gunakan perintah USERADD, PASSWD, USERDEL, dan USERMOD. 3) Konfigurasi Rangkaian: Gunakan perintah IFConfig, Echo, dan UFW. Operasi ini adalah asas pengurusan sistem Linux, dan menguasai mereka dengan berkesan dapat menguruskan sistem.

Bagaimana untuk melihat kata laluan pangkalan data di Navicat untuk Oracle? Bagaimana untuk melihat kata laluan pangkalan data di Navicat untuk Oracle? Apr 08, 2025 pm 09:33 PM

Navicat for Oracle tidak menyokong kata laluan pangkalan data untuk alasan keselamatan. Jika anda lupa kata laluan anda, anda boleh menetapkan semula dengan menggunakan alat sistem sendiri (seperti SQLPLUS) dan mempunyai kebenaran yang mencukupi. Gunakan Mekanisme Reset Kata Laluan Pangkalan Data untuk menghubungi pentadbir pangkalan data atau merujuk kepada dokumentasi rasmi. Pasang semula pangkalan data konfigurasi (yang paling menyeluruh tetapi clumsiest).

Kaedah navicat untuk melihat kata laluan pangkalan data sqlite Kaedah navicat untuk melihat kata laluan pangkalan data sqlite Apr 08, 2025 pm 09:36 PM

Ringkasan: Navicat tidak dapat melihat kata laluan SQLite kerana: SQLite tidak mempunyai medan kata laluan tradisional. Keselamatan SQLite bergantung pada kawalan kebenaran sistem fail. Jika kata laluan fail dilupakan, ia tidak boleh diambil (kecuali pangkalan data disulitkan, kunci diperlukan).

Bagaimana untuk belajar asas Linux? Bagaimana untuk belajar asas Linux? Apr 10, 2025 am 09:32 AM

Kaedah untuk pembelajaran asas Linux dari awal termasuk: 1. Memahami sistem fail dan antara muka baris perintah, 2. Master arahan asas seperti LS, CD, MKDIR, 3.

See all articles