最近接了不少学生作业大多数都是预测和数据分析以及分类器相关,所用图表展示用到Matplotlib,经常会涉及到一些问题,对出现的问题进行整理,避免重复踩坑。
- 中文显示乱码问题
图表展示,图例等标识都需要用到中文,如果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
|
- 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’)