当前位置 : 主页 > 编程语言 > python >

Matplotlib基础--简单折线图

来源:互联网 收集:自由互联 发布时间:2022-06-15
概述:Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,

概述:Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

1.简单的折线图

对于图表来说,最简单的莫过于作出一个单一函数  的图像。本节中我们首先来介绍创建这种类型图表。

import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

对于所有的 Matplotlib 图表来说,我们都需要从创建图形和维度开始。图形和维度可以使用下面代码进行最简形式的创建:注意:在最后加上plt.show()显示,以下案例都是这样不再赘述

fig = plt.figure()
ax = plt.axes()
plt.show()

Matplotlib基础--简单折线图_坐标轴

在 Matplotlib 中,图形(类​​plt.Figure​​​的一个实例)可以被认为是一个包括所有维度、图像、文本和标签对象的容器。维度(类​​plt.Axes​​​的一个实例)就是你上面看到的图像,一个有边界的格子包括刻度和标签,最终还有我们画在上面的图表元素。在本书中,我们会使用变量名​​fig​​​来指代图形对象,以及变量名​​ax​​来指代维度变量。

一旦我们创建了维度,我们可以使用​​ax.plot​​方法将数据绘制在图表上。下面是一个简单的正弦函数图形:

fig = plt.figure()
ax = plt.axes()

x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));

Matplotlib基础--简单折线图_图例_02

 同样的,我们可以使用 pylab 接口(MATLAB 风格的接口)帮我们在后台自动创建这两个对象:

plt.plot(x, np.sin(x));

Matplotlib基础--简单折线图_图例_03

 如果我们需要在同一幅图形中绘制多根线条,只需要多次调用​​plot​​函数即可:

plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));

Matplotlib基础--简单折线图_Python_04

 这就是在 Matplotlib 中绘制简单函数图像的所有接口了。下面我们深入了解一下控制坐标轴和线条外观的细节.

你可能第一个想到需要进行调整的部分就是线条的颜色和风格。​​plt.plot()​​函数接受额外的参数可以用来指定它们。通过指定​​color​​关键字参数可以调整颜色,这个字符串类型参数基本上能用来代表任何你能想到的颜色。可以通过多种方式指定颜色参数:

plt.plot(x, np.sin(x - 0), color='blue') # 通过颜色名称指定
plt.plot(x, np.sin(x - 1), color='g') # 通过颜色简写名称指定(rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75') # 介于0-1之间的灰阶值
plt.plot(x, np.sin(x - 3), color='#FFDD44') # 16进制的RRGGBB值
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组的颜色值,每个值介于0-1
plt.plot(x, np.sin(x - 5), color='chartreuse'); # 能支持所有HTML颜色名称值

Matplotlib基础--简单折线图_Python_05

 如果没有指定颜色,Matplotlib 会在一组默认颜色值中循环使用来绘制每一条线条。

类似的,通过​​linestyle​​关键字参数可以指定线条的风格:

plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted');

# 还可以用形象的符号代表线条风格
plt.plot(x, x + 4, linestyle='-') # 实线
plt.plot(x, x + 5, linestyle='--') # 虚线
plt.plot(x, x + 6, linestyle='-.') # 长短点虚线
plt.plot(x, x + 7, linestyle=':'); # 点线

Matplotlib基础--简单折线图_Python_06

 如果你喜欢更简洁的代码,这些​​linestyle​​和​​color​​参数能够合并成一个非关键字参数,传递给​​plt.plot()​​函数:

plt.plot(x, x + 0, '-g') # 绿色实线
plt.plot(x, x + 1, '--c') # 天青色虚线
plt.plot(x, x + 2, '-.k') # 黑色长短点虚线
plt.plot(x, x + 3, ':r'); # 红色点线

Matplotlib基础--简单折线图_Python_07

 上面的单字母颜色码是 RGB 颜色系统以及 CMYK 颜色系统的缩写,被广泛应用在数字化图像的颜色系统中。

还有很多其他的关键字参数可以对折线图的外观进行精细调整;可以通过在 IPython 中使用帮助工具查看​​plt.plot()​​函数的文档来获得更多细节内容。

调整折线图:坐标轴范围

Matplotlib 会自动选择非常合适的坐标轴范围来绘制你的图像,但是有些情况下你也需要自己进行相关调整。使用​​plt.xlim()​​和​​plt.ylim()​​函数可以调整坐标轴的范围:

plt.plot(x, np.sin(x))

plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);

Matplotlib基础--简单折线图_Python_08

 如果某些情况下你希望将坐标轴反向,你可以通过上面的函数实现,将参数顺序颠倒即可:

plt.plot(x, np.sin(x))

plt.xlim(10, 0)
plt.ylim(1.2, -1.2);

Matplotlib基础--简单折线图_Python_09

 相关的函数还有​​plt.axis()​​(注意:这不是​​plt.axes()​​函数,函数名称是 i 而不是 e)。这个函数可以在一个函数调用中就完成 x 轴和 y 轴范围的设置,传递一个​​[xmin, xmax, ymin, ymax]​​的列表参数即可:

plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5]);

Matplotlib基础--简单折线图_坐标轴_10

 当然​​plt.axis()​​函数不仅能设置范围,还能像下面代码一样将坐标轴压缩到刚好足够绘制折线图像的大小:

plt.plot(x, np.sin(x))
plt.axis('tight');

Matplotlib基础--简单折线图_坐标轴_11

 还可以通过设置​​'equal'​​参数设置​​x​​轴与​​y​​轴使用相同的长度单位:

plt.plot(x, np.sin(x))
plt.axis('equal');

Matplotlib基础--简单折线图_图例_12

 更多关于设置 axis 属性的内容请查阅​​plt.axis​​函数的文档字符串。

折线图标签

本节最后介绍一下在折线图上绘制标签:标题、坐标轴标签和简单的图例。

标题和坐标轴标签是最简单的这类标签,Matplotlib 提供了函数用来方便的设置它们:

plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");

Matplotlib基础--简单折线图_坐标轴_13

 这些标签的位置、大小和风格可以通过上面函数的可选参数进行设置。参阅 Matplotlib 在线文档和这些函数的文档字符串可以获得更多的信息。

当一幅图中绘制了多条折线时,如果能够绘制一个线条对应的图例能让图表更加清晰。Matplotlib 也内建了函数来快速创建图例。估计你也猜到了,通过​​plt.legend()​​函数可以实现这个需求。虽然有很多种正确的方法来指定图例,作者认为最简单的方法是通过在绘制每条线条时指定对应的​​label​​关键字参数来使用这个函数:

plt.plot(x, np.sin(x), '-g', label='sin(x)')
plt.plot(x, np.cos(x), ':b', label='cos(x)')
plt.axis('equal')

plt.legend();

Matplotlib基础--简单折线图_折线图_14

 上图可见,​​plt.legend()​​函数绘制的图例线条与图中的折线无论风格和颜色都保持一致。查阅​​plt.legend​​文档字符串可以获得更多相关信息;我们在[自定义图表图例]一节中也会讨论更高级的图例应用。

额外内容:Matplotlib 的坑

虽然大多数的​​plt​​函数都可以直接转换为​​ax​​的方法进行调用(例如​​plt.plot()​​ → ​​ax.plot()​​,​​plt.legend()​​ → ​​ax.legend()​​等),但是并不是所有的命令都能应用这种情况。特别是用于设置极值、标签和标题的函数都有一定的改变。下表列出了将 MATLAB 风格的函数转换为面向对象的方法的区别:​​plt.xlabel()​​ → ​​ax.set_xlabel()​​​​plt.ylabel()​​ → ​​ax.set_ylabel()​​​​plt.xlim()​​ → ​​ax.set_xlim()​​​​plt.ylim()​​ → ​​ax.set_ylim()​​​​plt.title()​​ → ​​ax.set_title()​​在面向对象接口中,与其逐个调用上面的方法来设置属性,更常见的使用​​ax.set()​​方法来一次性设置所有的属性:

ax = plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),
xlabel='x', ylabel='sin(x)',
title='A Simple Plot');

Matplotlib基础--简单折线图_图例_15

 

上一篇:Matplotlib基础--简单散点图
下一篇:没有了
网友评论