Matplotlib常见问题
Roy Lv7

lfzqat.md.jpg
最近接了不少学生作业大多数都是预测和数据分析以及分类器相关,所用图表展示用到Matplotlib,经常会涉及到一些问题,对出现的问题进行整理,避免重复踩坑。

  1. 中文显示乱码问题
    图表展示,图例等标识都需要用到中文,如果MATPLOTLIB缺少中文字体的调用,图表显示的时候会出现乱码。
1
2
3
4
5
6
7
8
9
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.figure import Figure

# 正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
  1. tight_layout()
    Matplotlib v1.1 引入一个新的命令tight_layout(),用来调整子图参数,使之填充图像区域,解决Axes轴标签、标题、刻度超出图形区域的问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def show(self):
self.figure.tight_layout()
FigureCanvasAgg.draw(self)
if PORT is None:
return

if matplotlib.__version__ < '1.2':
buffer = self.tostring_rgb(0, 0)
else:
buffer = self.tostring_rgb()

if len(set(buffer)) <= 1:
# do not plot empty
return

render = self.get_renderer()
width = int(render.width)

plot_index = index if os.getenv("PYCHARM_MATPLOTLIB_INTERACTIVE", False) else -1
try:
sock = socket.socket()
sock.connect((HOST, PORT))
sock.send(struct.pack('>i', width))
sock.send(struct.pack('>i', plot_index))
sock.send(struct.pack('>i', len(buffer)))
sock.send(buffer)
except OSError as _:
# nothing bad. It just means, that our tool window doesn't run yet
pass

当axes列表为空的时候,tight_layout()将会报错,此时需要将plt.show()替换为plt.savefig(‘file.png’,bbox_inches=’tight’)

  • 本文标题:Matplotlib常见问题
  • 本文作者:Roy
  • 创建时间:2020-01-10 11:17:19
  • 本文链接:https://www.yrzdm.com/2020/01/10/Matplotlib/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!