# 如何用python画图--matplotlib实例与补充

1. Figure, Axes, Axis的关系：

2. 毕业论文中的实例图：

```import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  #用来正常显示负号

### Data:
#1290-2017
a1=(21.98, 14.97, 7.42, 3.30)
a2=(24.07, 16.59, 8.41, 3.50)
a3=(19.,   12.67, 6.,   3.  )
#1290-1850
b1=(22.10,  13.73,  6.42,  2.67)
b2=(24.34,  15.84,  7.62,  2.93)
b3=(18.64,  10.45,  4.55,  2.27)
#1850-2017
c1=(21.56,  19.16,  10.78,  5.39)
c2=(22.99,  19.54 , 11.49,  5.75)
c3=(20.  ,  18.75,  10.  ,  5.  )
#1981-2017
d1=(16.22, 16.22,  13.51,  5.41)
d2=(25.,   25., 25.,  10.)
d3=(5.88,  5.88, 0.,  0.)

### Plot:
ind = np.arange(4)  # the x locations for the groups
width = 0.2  # the width of the bars

fig, ax = plt.subplots(2,2,figsize=(15, 15),dpi=100)

rects1 = ax[0,0].bar(ind - 0.2, a1, width, color='mediumseagreen', label='所有年份')
rects2 = ax[0,0].bar(ind , a2, width, color='IndianRed', label='海冰偏少年')
rects3 = ax[0,0].bar(ind + 0.2, a3, width, color='steelblue', label='海冰偏多年')

# Add some text for labels, title and custom x-axis tick labels, etc.
ax[0,0].set_ylabel(u'强冷冬年占比（%）',fontsize=20)
ax[0,0].set_title('(a) 1289-2017',fontsize=20)
ax[0,0].set_xticks(ind)
ax[0,0].set_xticklabels(('0.75 std', '1 std', '1.5 std', '2 std'),fontsize=20)
ax[0,0].legend(loc=0,prop={'size': 14},framealpha=0.3)
ax[0,0].tick_params(labelcolor='k', labelsize='20', width=3)
ax[0,0].set_ylim(0,26)

rects1 = ax[0,1].bar(ind - 0.2, d1, width, color='mediumseagreen', label='所有年份')
rects2 = ax[0,1].bar(ind , d2, width, color='IndianRed', label='海冰偏少年')
rects3 = ax[0,1].bar(ind + 0.2, d3, width, color='steelblue', label='海冰偏多年')
# Add some text for labels, title and custom x-axis tick labels, etc.
# ax[0,1].set_ylabel(u'强冷冬年占比（%）',fontsize=20)
ax[0,1].set_title('(b) 1981-2017',fontsize=20)
ax[0,1].set_xticks(ind)
ax[0,1].set_xticklabels(('0.75 std', '1 std', '1.5 std', '2 std'),fontsize=20)
ax[0,1].legend(loc=0,prop={'size': 14},framealpha=0.3)
ax[0,1].tick_params(labelcolor='k', labelsize='20', width=3)
ax[0,1].set_ylim(0,26)

rects1 = ax[1,0].bar(ind - 0.2, b1, width, color='mediumseagreen', label='所有年份')
rects2 = ax[1,0].bar(ind , b2, width, color='IndianRed', label='海冰偏少年')
rects3 = ax[1,0].bar(ind + 0.2, b3, width, color='steelblue', label='海冰偏多年')
# Add some text for labels, title and custom x-axis tick labels, etc.
ax[1,0].set_ylabel(u'强冷冬年占比（%）',fontsize=20)
ax[1,0].set_title('(c) 1290-1850',fontsize=20)
ax[1,0].set_xticks(ind)
ax[1,0].set_xticklabels(('0.75 std', '1 std', '1.5 std', '2 std'),fontsize=20)
ax[1,0].legend(loc=0,prop={'size': 14},framealpha=0.3)
ax[1,0].tick_params(labelcolor='k', labelsize='20', width=3)
ax[1,0].set_ylim(0,26)

rects1 = ax[1,1].bar(ind - 0.2, c1, width, color='mediumseagreen', label='所有年份')
rects2 = ax[1,1].bar(ind , c2, width, color='IndianRed', label='海冰偏少年')
rects3 = ax[1,1].bar(ind + 0.2, c3, width, color='steelblue', label='海冰偏多年')
# Add some text for labels, title and custom x-axis tick labels, etc.
# ax[3].set_ylabel(u'强冷冬年占比（%）',fontsize=20)
ax[1,1].set_title('(d) 1850-2017',fontsize=20)
ax[1,1].set_xticks(ind)
ax[1,1].set_xticklabels(('0.75 std', '1 std', '1.5 std', '2 std'),fontsize=20)
ax[1,1].legend(loc=0,prop={'size': 14},framealpha=0.3)
ax[1,1].tick_params(labelcolor='k', labelsize='20', width=3)
ax[1,1].set_ylim(0,26)
# ax[1,1].set_yticks([-1,0,1])

plt.show()```

#### 3. matplotlib如何正常显示中文：

###### 【1】 Windows:
```# 画图之前加上：
# 用来正常显示中文标签，u'内容'
plt.rcParams['font.sans-serif']=[u'SimHei']  # 或其他系统有的字体，比如： ['Microsoft YaHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=False

# 同样，可以进行一些其他画图配置：
plt.rcParams['figure.figsize']=10,10
plt.rcParams['figure.dpi']=300```
###### 【2】 Mac:

• 第一步：下载字体并安装：SimHei
• 第二步：将字体文件SimHei.ttf拷贝到python安装路径/site-packages/matplotlib/mpl-data/fonts/ttf目录中
• 第三步：修改~python安装路径/site-packages/matplotlib/mpl-data/matplotlibrc文件。找到如下两项，去掉前面的#，并在font.sans-serif冒号后面加上SimHei，如下：
```font.family         : sans-serif
font.sans-serif     : SimHei, Bitstream Vera Sans, Lucida Grande,Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif```

• 第四步：在脚本运行前加入：
```# matplotlib不会每次启动时都重新扫描所有的字体文件并创建字体索引列表，
# 因此在复制完字体文件之后，需要运行下面的语句以重新创建字体索引列表
import matplotlib as mpl
from matplotlib.font_manager import _rebuild
_rebuild()
#防止中文乱码问题
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False```

```plt.rcParams['font.sans-serif']=[u'SimHei']
plt.rcParams['axes.unicode_minus']=False```

0 条评论

• ### json读入小结

回家已经11点后，写一点今天工作中用到的知识，不太熟练，耽误了些时间。因为任务紧急，类似这种对某个知识点不熟练，累计叠加起来，就会导致做事变慢，最终只能靠加班。

• ### 面向 python 小白的贪吃蛇游戏

作为 python 小白，总是觉得自己要做好百分之二百的准备，才能开始写程序。以至于常常整天在那看各种语法教程，学了几个月还是只会print('hello wo...

• ### python的图像处理模块

除了opencv专门用来进行图像处理，可以进行像素级、特征级、语义级、应用级的图像处理外，python中还有其他库用来进行简单的图像处理，比如图像的读入和保存、...

• ### Leetcode【227、468、848、1081】

这道题是实现一个基本计算器，即给一个只包括 +、-、*、/、数字和空格的字符串，计算结果。

• ### 石晓文：算法入门必备指南

写本文的目的，一是对自己研究生阶段所学习的知识做一个总结，二是希望对那些刚接触机器学习，准备往这个方向发展的同学们提供一些可借鉴的经验。

• ### python之异常处理

我们在编码或者做产品的时候，不仅要考虑正向的，还要考虑到异常情况下如何处理。人生也是如此，成功的时候要考虑落败时，这样考虑问题就全面，周全。

• ### python和C的主要区别

C语言是编译型语言，经过编译后，生成机器码，然后再运行，执行速度快，不能跨平台，一般用于操作系统，驱动等底层开发。python是编译型还是解释型这个界限并不明显...

• ### Python 播放音频与录音

os.system(file) 调用系统应用来打开文件，file 可为图片或者音频文件。

• ### Python玩蛇指南：课程2分钱活动返场！

? 对的 我是个玩蛇的 （Python的原意是蟒蛇） ? 其实 在这个江湖中 玩蛇的花样千奇百怪 因而也衍生出了许多“黑话” 一般人玩蛇都是 web应用开发...

MeteoAI