一、引入

import matplotlib as mpl

import matplotlib.pyplot as plt

二、配置

1、画图接口

Matplotlib 有两种画图接口:

(1)一个是便捷的 MATLAB 风格接口

(2)功能更强大的面向对象接口【推荐,下文都以这个为例】

在面向对象接口中,画图函数不再受到当前“活动”图形或坐标轴的限制,而变成了显式的 Figure 和 Axes 的方法(一个Figure画布下可以有多个Axes子图)。

2、静态 or 交互

%matplotlib notebook 会在 Notebook 中启动交互式图形。

%matplotlib inline 会在 Notebook 中启动静态图形。

下文统一使用%matplotbib inline。

3、样式表

默认是经典(classic)的 Matplotlib 风格:

plt.style.use('classic')

更多风格:

plt.style.available

# ['_classic_test',

'bmh',

'classic',

'dark_background',

'fast',

'fivethirtyeight',

'ggplot',

'grayscale',

'seaborn-bright',

'seaborn-colorblind',

'seaborn-dark-palette',

'seaborn-dark',

'seaborn-darkgrid',

'seaborn-deep',

'seaborn-muted',

'seaborn-notebook',

'seaborn-paper',

'seaborn-pastel',

'seaborn-poster',

'seaborn-talk',

'seaborn-ticks',

'seaborn-white',

'seaborn-whitegrid',

'seaborn',

'Solarize_Light2',

'tableau-colorblind10']

也可自定义样式文件:

.mplstyle

4、导出

fig.savefig('my_figure.png')

支持的格式可以通过这个查看:

fig.canvas.get_supported_filetypes()

二、用法

1、线形图

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 1000)

ax.plot(x, np.cos(x),color='blue',linestyle='dotted',label='cos(x)');

ax.plot(x, np.sin(x),color='0.9',label='sin(x)');

# ----- 调整线条 -----

# color - 调整线条的颜色

ax.plot(x, np.sin(x - 0), color='blue') # 标准颜色名称

ax.plot(x, np.sin(x - 1), color='g') # 缩写颜色代码(rgbcmyk)

ax.plot(x, np.sin(x - 2), color='0.75') # 范围在0~1的灰度值

ax.plot(x, np.sin(x - 3), color='#FFDD44') # 十六进制(RRGGBB,00~FF)

ax.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组,范围在0~1

ax.plot(x, np.sin(x - 5), color='chartreuse'); # HTML颜色名称

# linestyle - 调整线条的风格

ax.plot(x, x + 0, linestyle='solid')

ax.plot(x, x + 1, linestyle='dashed')

ax.plot(x, x + 2, linestyle='dashdot')

ax.plot(x, x + 3, linestyle='dotted');

# 你可以用下面的简写形式

ax.plot(x, x + 4, linestyle='-') # 实线

ax.plot(x, x + 5, linestyle='--') # 虚线

ax.plot(x, x + 6, linestyle='-.') # 点划线

ax.plot(x, x + 7, linestyle=':'); # 实点线

# ----- 调整坐标轴 -----

# 坐标轴上下限

ax.xlim(-1, 11)

ax.ylim(-1.5, 1.5);

ax.ylim(1.5, -1.5);# 坐标逆序

ax.axis([-1, 11, -1.5, 1.5]);

# 紧凑模式

ax.axis('tight');

# 横纵坐标 1:1

ax.axis('equal');

# ----- 调整标题 -----

# 设置图形标题、横纵坐标标题

ax.title("A Sine Curve")

ax.xlabel("x")

ax.ylabel("sin(x)");

# ----- 图例(跟 label 属性挂钩) -----

ax.legend()

# 详细属性请查文档

ax.legend(loc='upper left', frameon=True, ncol=2, fancybox=True, framealpha=1, shadow=True, borderpad=1)

# 选择图例显示的元素

# 略

# 在图例中显示不同尺寸的点

# 略

# 同时显示多个图例

# 略

2、散点图(scatter plot)

(1)方法一:

跟上面线形图的区别在于 ax.plot() 的第三个参数传了个字符。

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 30)

ax.plot(x, np.sin(x), 'o', color='black');

# 第三个参数可能值:['o', '.', ',', 'x', '+', 'v', '^', '', 's', 'd']

(2)方法二:plt.scatter

取舍:面对大型数据集时,plt.plot 方法比 plt.scatter 方法性能要好。

3、误差线

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 50)

dy = np.linspace(0, 1, 50)

y = np.sin(x)

# 1、基本误差线

ax.errorbar(x, y, yerr=dy, fmt='o', color='black', ecolor='lightgray', elinewidth=3, capsize=0);

# 经验:让误差线的颜色比数据点的颜色浅一点效果会非常好,尤其是在那些比较密集的图形中

# 2、连续误差线

4、密度图与等高线图

fig = plt.figure()

ax = plt.axes()

# 1、用 plt.contour 画等高线图

def f(x, y):

return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 50)

y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)

Z = f(X, Y)

ax.contour(X, Y, Z, colors='black');

# 当图形中只使用一种颜色时,默认使用虚线表示负数,使用实线表示正数。

# 单色(深浅)

ax.contour(X, Y, Z, 20, colors='black');

# 双色(红灰)(RdGy = Red-Gray = 红灰)

ax.contour(X, Y, Z, 20, cmap='RdGy');# 见下图1

# 2、用 plt.contourf 画带有填充色的等高线图

ax.contourf(X, Y, Z, 20, cmap='RdGy');# 见下图2

# 3、更复杂的图形用 plt.imshow

# 略

# plt.contour、plt.contourf 与 plt.imshow 这三个函数组合起来之后,就打开了用二维图画三维数据的无尽可能。

5、频次直方图

(1)一维

fig = plt.figure()

ax = plt.axes()

data = np.random.randn(1000)

# 1、hist 画单个频次直方图

ax.hist(data, bins=30, normed=11, alpha=0.5, histtype='stepfilled', color='steelblue', edgecolor='none');

# 2、hist 画多个频次直方图 (见下图)

x1 = np.random.normal(0, 0.8, 1000)

x2 = np.random.normal(-2, 1, 1000)

x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

ax.hist(x1, **kwargs)

ax.hist(x2, **kwargs)

ax.hist(x3, **kwargs);

# 3、只计算数值结果不画图

counts, bin_edges = np.histogram(data, bins=5)

print(counts, bin_edges)

# [ 64 372 419 138 7] [-2.71435952 -1.43623111 -0.1581027 1.12002572 2.39815413 3.67628254]

(2)二维

fig = plt.figure()

ax = plt.axes()

mean = [0, 0]

cov = [[1, 1], [1, 2]]

# 用多元高斯分布(multivariate Gaussian distribution)生成 x 轴与 y 轴的样本数据:

x, y = np.random.multivariate_normal(mean, cov, 10000).T

# 1、plt.hist2d:二维频次直方图

plt.hist2d(x, y, bins=30, cmap='Blues')# 看下图

# plt.hexbin:矩形划分 -> 六边形划分

# ax.hexbin(x, y, gridsize=30, cmap='Blues')

cb = plt.colorbar(label='count in bin')

# 2、平滑版本的二维频次直方图 - 核密度估计(kernel density estimation,KDE)

# 3、只计算数值结果不画图

counts, xedges, yedges = np.histogram2d(x, y, bins=30)

6、文字与注释

(1)文字

# 拿前面第一个线形图的做例子:

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 1000)

ax.plot(x, np.cos(x),color='blue',linestyle='dotted',label='cos(x)');

ax.plot(x, np.sin(x),color='0.9',label='sin(x)');

# ax.text() 在图上增加文字标签

style = dict(size=10, color='gray')

ax.text(1, 0.1, "111", ha='center',**style)

ax.text(5, 0.5, "222", ha='center', **style)

ax.text(10, 0.8, "333", ha='center', **style)

ax.text() 的 transform 有三种不同的坐标系:

# 1、transData 坐标用x 轴与y 轴的标签作为数据坐标。

ax.text(1, 1, ". Data: (1, 1)", transform=ax.transData)

# 2、transAxes 坐标以坐标轴(图中白色矩形)左下角的位置为原点,按坐标轴尺寸的比例呈现坐标。

ax.text(0.5, 0.1, ". Axes: (0.5, 0.1)", transform=ax.transAxes)

# 3、transFigure 坐标与之类似,不过是以图形(图中灰色矩形)左下角的位置为原点,按图形尺寸的比例呈现坐标。

ax.text(0.2, 0.2, ". Figure: (0.2, 0.2)", transform=fig.transFigure);

# 假如你改变了坐标轴上下限,那么只有transData 坐标会受影响,其他坐标系都不变!

(2)箭头

# 拿前面第一个线形图的做例子:

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 1000)

ax.plot(x, np.cos(x),color='blue',linestyle='dotted',label='cos(x)');

ax.plot(x, np.sin(x),color='0.9',label='sin(x)');

# ax.text() 在图上增加文字标签

ax.annotate('local maximum', xy=(1, 0.3), xytext=(3, 0.5), arrowprops=dict(facecolor='black', shrink=0.05))

7、三维图

# ax.plot3D - 三维线图

zline = np.linspace(0, 15, 1000)

xline = np.sin(zline)

yline = np.cos(zline)

ax.plot3D(xline, yline, zline, 'gray')

# ax.scatter3D - 三维散点图

zdata = 15 * np.random.random(100)

xdata = np.sin(zdata) + 0.1 * np.random.randn(100)

ydata = np.cos(zdata) + 0.1 * np.random.randn(100)

ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');

# 等高线、线框图、曲面图 区别

8、地图

需要用到第三方库:conda install basemap

9、更多功能

# 配置颜色条

# 略

# 多子图

# 略

# 自定义坐标轴刻度

# 略

三、其他画图方法

1、Seaborn

第三方的 Seaborn 在 Matplotlib 的基础上开发了一套 API,为默认的图形样式和颜色设置提供了理智的选择,为常用的统计图形定义了许多简单的高级函数,并与 Pandas DataFrame 的功能有机结合。

2、pandas DataFrame 自带画图功能

df = pd.DataFrame({'lab':['A', 'B', 'C'], 'val':[10, 30, 20]})

print(df)

ax = df.plot.bar(x='lab', y='val', rot=0)# 赋值给 ax 是为了不让输出 df.plot.bar 这个冗余信息

参考资料

《Python 数据科学手册》

python数据科学用法_Matplotlib 使用 - 《Python 数据科学手册》学习笔记相关推荐

  1. Task 06 数据增强;模型微调;目标检测基础 学习笔记

    Task 06 数据增强:模型微调:目标检测基础 学习笔记 数据增强 图像增广 在5.6节(深度卷积神经网络)里我们提到过,大规模数据集是成功应用深度神经网络的前提.图像增广(image augmen ...

  2. python matplotlib数据可视化教程_matplotlib的Python数据可视化和探索——入门指南

    matplotlib--最受欢迎的Python库,用于数据可视化和探索 我喜欢在Python中使用matplotlib.这是我学会掌握的第一个可视化库,此后一直存在.matplotlib是最受欢迎的用 ...

  3. python类高级用法_十.python面向对象高级用法

    1.反射 1.1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的 ...

  4. python delimiter分隔符用法_使用Python文件读写,自定义分隔符(custom delimiter)

    众所周知,python文件读取文件的时候所支持的newlines(即换行符),是指定的.这一点不管是从python的doucuments上还是在python的源码中(作者是参考了python的io版本 ...

  5. 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  6. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:07 规则式自然语言处理系统

    07 规则式自然语言处理系统 7.1 规则式系统 7.2 规则式系统的目的 7.2.1 为何需要规则式系统 7.2.2 使用规则式系统的应用 7.2.3 练习 7.2.4 开发规则式系统需要的资源 7 ...

  7. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:08 自然语言处理中的机器学习方法

    08 自然语言处理中的机器学习方法 8.1 机器学习的基本概念 8.1.1 ML类型 8.1.2 ML 监督学习 8.1.3 无监督学习 8.1.4 强化学习 8.2 自然语言处理应用的开发步骤 8. ...

  8. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:11 如何提高你的NLP技能

    11 如何提高你的NLP技能 11.1 开始新的NLP职业生涯 11.2 备忘列表 11.3 确定你的领域 11.4 通过敏捷的工作来实现成功 11.5 NLP和数据科学方面一些有用的博客 11.6 ...

  9. python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

    本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...

  10. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

最新文章

  1. 用了这么久配置中心,还不知道长轮询是什么?
  2. Html5之基础-7 HTML列表
  3. BZOJ2743 [HEOI2012]采花
  4. vue 输入框限制3位小数_vue+element 中 el-input框 限制 只能输入数字及几位小数(自定义)和输入框之键盘...
  5. python英语翻译-python制作英语翻译小工具代码实例
  6. success or not?
  7. python批量音频转格式_python将mp3格式批量转化为wav格式
  8. RecyclerView(四)设置分割线样式(Android 5.0 新特性)
  9. FireUIPagedScrollView
  10. 20165301课下作业
  11. 前端基础学习之CSS样式
  12. 初始化栈的代码_限定性数据结构-栈
  13. greensock是个很不错的类库,故转载了一些关于其中类使用方法的文章。
  14. 怎么拆分PDF文件?分享两种拆分文件的方法
  15. python 函数基础
  16. 路由追踪traceroute分析
  17. 平分秋色? 鹿死谁手?
  18. 积分和微分电路结构原理带Multisim仿真
  19. 金砖国家智慧城市建设案例
  20. selenium 原理应用 - 利用 requests 模拟 selenium 驱动浏览器

热门文章

  1. 3 判断是否为合法的URL
  2. 盘点 | Python自带的那些数据集
  3. 自定义控件--最简单九宫格解锁
  4. 大学python教材课后答案_大学慕课2020年用Python玩转数据课后答案
  5. GPS/RTK高精度定位系统有什么优势?
  6. 【C++】信息学联赛模拟题1+解析+代码
  7. 十二、G1垃圾收集器
  8. 【分享】Java集合求交集、并集、差集
  9. FSL5.0使用教程
  10. win7开启iis服务