众所周知,经过数据绘图,咱们能够将枯燥的数字转换成容易被人们接受的图表,从而让人留下更加深入的印象。而大多数编程语言都有本身的绘图工具,matplotlib就是基于Python的绘图工具包,使用它咱们能够仅仅使用几行代码就生成 饼图、直方图、功率谱、条形图、错误图、散点图、气泡图,甚至生成动态图型也都很轻松。并且它的绘图方法丰富,能够在各类交互式环境中运行,且生成的图像质量高、兼容各类硬拷贝格式。html
博主也是在测试一个算法的时候,为了更直观的呈现数据走向,学习了它的相关用法,这篇博客大部份内容是在此过程当中的学习笔记。python
matplotlib的官网地址是https://matplotlib.org/gallery
,下面这些是他们官网的一些示例图形。算法
Matplotlib的安装比较容易,能够直接经过pip安装,也能够经过下载安装包的方式安装。博主使用的是python3,相关的安装命令以下:编程
pip3 install matplotlib
若是你的Python3能够直接点击下面的py3连接下载进行安装,则点击能够点击其余python版本
下载对应Python版本进行安装
matplotlib-1.4.3.win-amd64-py3windows
其余python版本api
用python画柱状图很容易,主要的方法是:数组
atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
- left: 每个柱形左侧的X坐标
- height:每个柱形的高度
- width: 柱形之间的宽度
- bottom: 柱形的Y坐标
- color: 柱形的颜色
import matplotlib.pyplot as plt import time source_data = {'mock_verify': 369, 'mock_notify': 192, 'mock_sale': 517} # 设置原始数据 for a, b in source_data.items(): plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=11) # ha 文字指定在柱体中间, va指定文字位置 fontsize指定文字体大小 # 设置X轴Y轴数据,二者均可以是list或者tuple x_axis = tuple(source_data.keys()) y_axis = tuple(source_data.values()) plt.bar(x_axis, y_axis, color='rgb') # 若是不指定color,全部的柱体都会是一个颜色 plt.xlabel(u"渠道名") # 指定x轴描述信息 plt.ylabel(u"访问量") # 指定y轴描述信息 plt.title("渠道访问量统计表") # 指定图表描述信息 plt.ylim(0, 600) # 指定Y轴的高度 plt.savefig('{}.png'.format(time.strftime('%Y%m%d%H%M%S'))) # 保存为图片 plt.show()
从上面的图片看到,matplotlib绘制图像显示中文时,中文会变成小方格子。搜了不少资料,最佳的解决方法是动态设置参数,添加下面的代码。dom
from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
用python画柱状图的主要方法以下:编程语言
plt.pie(x=fracs, labels=labels, explode=explode, autopct='%3.1f %%',shadow=False, labeldistance=1.1, startangle=0, pctdistance=0.8)
相关的参数已在注释中说明工具
import matplotlib.pyplot as plt data = {'8516464': 106, '8085460': 704, '7593813': 491, '8709362': 24, '8707829': 6, '8684658': 23, '8679301': 11, '8665923': 29, '8660909': 23, '8652968': 31, '8631727': 31, '8622935': 24, '8620593': 18, '8521737': 33, '8605441': 49, '8495205': 82, '8477276': 57,'8474489': 71, '8456502': 50, '8446529': 68, '8433830': 136, '8254158': 103, '8176029': 88, '8081724': 58, '7922592': 185, '7850099': 62,'7617723': 61, '7615562': 90, '7615052': 57, '7604151': 102, '7511294': 59,'6951654': 27, '6946388': 142, '6945373': 159, '6937716': 347, '7460176': 64, '7246377': 87, '7240621': 145, '7204707': 645, '7028401': 671} source_data = sorted(data.items(), key=lambda x: x[1], reverse=True) print(source_data) labels = [source_data[i][0][:4] for i in range(len(source_data))] # 设置标签 fracs = [source_data[i][1] for i in range(len(source_data))] explode = [x * 0.01 for x in range(len(source_data))] # 与labels一一对应,数值越大离中心区越远 plt.axes(aspect=1) # 设置X轴 Y轴比例 # labeldistance标签离中心距离 pctdistance百分百数据离中心区距离 autopct 百分比的格式 shadow阴影 plt.pie(x=fracs, labels=labels, explode=explode, autopct='%3.1f %%', shadow=False, labeldistance=1.1, startangle=0, pctdistance=0.8, center=(-1, 0)) # 控制位置:bbox_to_anchor数组中,前者控制左右移动,后者控制上下。ncol控制 图例所列的列数。默认值为1。fancybox 圆边 plt.legend(loc=7, bbox_to_anchor=(1.2, 0.80), ncol=3, fancybox=True, shadow=True, fontsize=8) plt.show()
用python画动态图的主要方法以下:
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), init_func=init, blit=True)
能够访问下面的连接查看它官网的使用介绍
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time # Fixing random state for reproducibility np.random.seed(196) # 初始数据绘图 dis = np.zeros(40) dis2 = dis fig, ax = plt.subplots() line, = ax.plot(dis) ax.set_ylim(-1, 1) plt.grid(True) ax.set_ylabel("distance: m") ax.set_xlabel("time") def update(frame): global dis global dis2 global line # 读入模拟 a = np.random.rand() * 2 - 1 time.sleep(np.random.rand() / 10) # 绘图数据生成 dis[0:-1] = dis2[1:] dis[-1] = a dis2 = dis # 绘图 line.set_ydata(dis) # 颜色设置 plt.setp(line, 'color', 'c', 'linewidth', 2.0) ani = animation.FuncAnimation(fig, update, frames=None, interval=100) plt.show()
效果图:
matplotlib中对显示的字体和颜色均可以进行定制:
内建颜色 | 蓝色 | 绿色 | 红色 | 青色 | 品红 | 黄色 | 黑色 |
---|---|---|---|---|---|---|---|
对应字符 | 'b' | 'g' | 'r' | 'c' | 'm' | 'y' | 'k' |
其余的颜色使用能够参考下面这篇博客
字体 | 对应字体 |
---|---|
黑体 | SimHei |
微软雅黑 | Microsoft YaHei |
微软正黑体 | Microsoft JhengHei |
新宋体 | NSimSun |
新细明体 | PMingLiU |
细明体 | MingLiU |
标楷体 | DFKai-SB |
仿宋 | FangSong |
楷体 | KaiTi |
仿宋_GB2312 | FangSong_GB2312 |
楷体_GB2312 | KaiTi_GB2312 |
参考资料: