matplotlib 绘图与显示图像
绘图
导入需要的模块
1 | import numpy as np |
画基本图形
折线图 plot
1 | y=np.random.randn(100) |

可选参数如下所示:

也可以通过更改参数来改变画图效果
1 | x=np.cumsum(np.random.rand(100)) |

可选的参数有

散点图 scatter
例如:数据服从正态分布,相关系数是0.5
1 | z=np.random.randn(100,2) |

参数也是可以修改的例如:
1 | z=np.random.randn(100,2) |

条形图 bar
画条形图 bar,需要两个一位数组,第一个是横坐标,每个条形图的开始位置;纵坐标是条形图的高度
1 | y=np.random.rand(5) |

修改他的显示属性,可以使用一个颜色数组来指定每个条形图的颜色。
y=np.random.rand(5);
x=np.arange(5);
colors=[‘#FF0000’,’#FFFF00’,’#00FF00’,’#00FFFF’,’#0000FF’]
plt.bar(x,y,width=0.5,color=colors,edgecolor=’#000000’,linewidth=5)
plt.show()

图表 pie
使用一个一维数组来表示,不要求累加和是1,可以使人以大小的正数
1 | x=np.arange(1,8) labels=['label1','label2','label3','label4','label5','label6','label7'] plt.pie(x,labels=labels) |

直方图 hist
需要一个数组,bins参数表示将数据分成几组,默认是10组
1 | x=np.random.randn(2000) |

如果想要生成累计直方图需要使参数cumulative为true
1 | x=np.random.randn(1000); |

多图表
在同一个图上画出多张图表,需要首先使用figure()函数生成一个画板,画子图时需要使用sp=add_subplot(m,n,p)来表示子图。m表示行,n表示列,p表示第几个图。
返回的是子图的句柄用于设置一些参数。最后要想显示出来需要使用draw()函数,将这些子图画在画板上,然后用show()函数显示出来。
1 | fig = plt.figure() |

3D 曲面图
画线,使用plot,需要Axed3D(fig)来画出3D轴线,
1 | from mpl_toolkits.mplot3d import Axes3D |

3D 曲线图
1 | import copy |

图像配置
字体
1 | from matplotlib.font_manager import FontProperties |
使用文字时指定参数 fontproperties=font_song 即可
或者
1 | ax2.set_xlabel('window size', fontsize=9, fontproperties = 'Times New Roman') |
或者
将全局字体改为Times New Roman:
1 | import matplotlib.pyplot as plt |
如果出现类似如下错误:
1 | apps/rhel6/Python-2.7.2/lib/python2.7/site-packages/matplotlib/font_manager.py:1224: UserWarning: findfont: Font family ['Playfair Display'] not found. Falling back to Bitstream Vera Sans(prop.get_family(), self.defaultFamily[fontext])) |
则需要删除 fontList.cache 文件。这个文件有点不好找。
用如下命令获得目录:
1 | import matplotlib as plt |
然后进去删除fontList.cache就可以了!
窗口
窗口设置
开启一个窗口,num 设置子图数量,figsize 设置窗口大小,dpi 设置分辨率
1 | fig = plt.figure(num=1, figsize=(15, 8),dpi=80) |
多张子图
1 | fig=plt.figure() |

坐标轴
关闭刻度
- 对于
plt
1 | plt.xticks([]) |
- 对于
ax(matplotlib.axes._subplots.AxesSubplot)
1 | ax.set_xticks([]) |
1 | ax.spines['top'].set_visible(False) # 去掉上边框 |
- 全部坐标轴(上下左右)不显示
1 | plt.axis('off') |
坐标轴名称
1 | plt.xlabel('Window Size',fontsize=14) |
或者
1 | ax1 = fig.add_subplot(111) |
坐标轴范围
1 | #设置坐标轴范围 |
图表标题
1 | plt.title('Squares',fontsize=24) |
刻度字号
1 | plt.tick_params(axis='both',which='major',labelsize=14) |
图例
同一图表中两条线
1 | plt.legend(handles=[l1,l2],labels=['up','down'],loc='best') |
双 y 轴
1 | fig = plt.figure() |

其中,ax = twinx() 意思是创建了一个独立的Y轴,共享了X轴。双坐标轴
这时两个图例是分开的,如果想要图例合并,则应为:
1 | fig = plt.figure() |

保存图像
使用savefig(’filename._ext_’) ,其中ext支持png, pdf, ps, eps or svg格式。
1 | plt.savefig('F:/where-you-want-to-save.png', dpi=300, bbox_inches="tight") |
- 保存文件,dpi指定保存文件的分辨率
bbox_inches="tight"可以保存图上所有的信息,不会出现横纵坐标轴的描述存掉了的情况
论文图实例
实例 1
1 | # coding=utf-8 |

实例 2
1 | import matplotlib.pyplot as plt |

实例 3
1 | import matplotlib.pyplot as plt |

CNN 结构图
图片处理
导入模块
1 | from PIL import Image |
基本信息
1 | img = Image.open('1.jpg') |
1 | img_1 = np.array(Image.open('1.jpg')).astype('float') |
显示单个图片
1 | plt.figure("Image") # 图像窗口名称 |
显示灰度图像
1 | img = img.convert('L') #变为灰度图像 |