Python之Matplotlib数据可视化(一):简易线形图(颜色、风格、坐标轴、图像标签)
在所有图形中,最简单的应该就是线性方程 y = f (x) 的可视化了。来看看如何创建这个简单的线形图。首先需要导入以下命令:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
要画 Matplotlib 图形时,都需要先创建一个图形 fig 和一个坐标轴 ax 。创建图形与坐标轴的最简单做法如下所示:
fig = plt.figure()
ax = plt.axes()
plt.show()
在 Matplotlib 里面,figure( plt.Figure 类的一个实例)可以被看成是一个能够容纳各种坐标轴、图形、文字和标签的容器。就像在图中看到的那样,axes ( plt.Axes 类的一个实例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。
从一组简单的正弦曲线(sinusoid)开始:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
plt.show()
如果想在一张图中创建多条线,可以重复调用 plot 命令:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));
plt.show()
1 调整图形:线条的颜色与风格
1.1 线条颜色
通常对图形的第一次调整是调整它线条的颜色与风格。 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') # 十六进制(RRGGBB,00~FF)
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颜色名称
具体线条颜色设置表格如下:
颜色符号 | 说明 |
---|---|
r | 红色 |
g | 绿色 |
b | 蓝色 |
w | 白色 |
c | 青色 |
m | 洋红 |
y | 黄色 |
k | 黑色 |
如果不指定颜色,Matplotlib 就会为多条线自动循环使用一组默认的颜色。
1.2 线条风格
与之类似,也可以用 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=':'); # 实点线
1.3 线条颜色和风格编码组合
如果你想用一种更简洁的方式,则可以将 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'); # 红色实点线
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, x + 0, '-g') # 绿色实线
plt.plot(x, x + 1, '--c') # 青色虚线
plt.plot(x, x + 2, '-.k') # 黑色点划线
plt.plot(x, x + 3, ':r'); # 红色实点线
plt.show()
这些单字符颜色代码是 RGB(Red/Green/Blue)
与CMYK(Cyan/Magenta/Yellow/blacK)
颜色系统中的标准缩写形式,通常用于数字化彩色图形。
1.4 线条和标记节点样式:
- 线条颜色:color=‘g’
- 线条风格:linestyle=’–’
- 线条粗细:linewidth=5.0
- 标记风格:marker=‘o’
- 标记颜色:markerfacecolor=‘b’
- 标记尺寸:markersize=20
- 透明度:alpha=0.5
线条和标记节点格式字符 如果不设置颜色,系统默认会取一个不同颜色来区别线条。
标记字符(mark) | 说明 |
---|---|
o | 实心圈标记 |
. | 点标记 |
, | 像素标记,极小的点 |
v | 倒三角标记 |
^ | 上三角标记 |
> | 右三角标记 |
< | 左三角标记 |
* | 星形标记 |
+ | 十字标记 |
x = np.linspace(0, 10, 1000)
plt.plot(x,
np.sin(x),
marker='o',
markersize=6,
markerfacecolor='r',
linestyle='-.',
linewidth=5,
alpha=0.8
)
还有很多其他用来调整图像的关键字参数。若想了解更多的细节,建议你用 IPython 的帮助工具查看 plt.plot() 函数的程序文档
2 调整图形:坐标轴上下限
虽然 Matplotlib 会自动为你的图形选择最合适的坐标轴上下限,但是有时自定义坐标轴上下限可能会更好。调整坐标轴上下限最基础的方法是 plt.xlim()
和 plt.ylim()
。
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
plt.show()
如果你想要让坐标轴逆序显示,那么也可以逆序设置坐标轴刻度值:
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x))
plt.xlim(10, 0)
plt.ylim(1.2, -1.2);
plt.show()
还有一个方法是 plt.axis()
(注意不要搞混 axes 和 axis
)。通过传入 [xmin, xmax,ymin, ymax]
对应的值, plt.axis() 方法可以让你用一行代码设置 x 和 y 的限值。
plt.plot(x, np.sin(x))
plt.axis([-1, 11, -1.5, 1.5]);
plt.axis() 能做的可不止如此,它还可以按照图形的内容自动收紧坐标轴,不留空白区域。
plt.plot(x, np.sin(x))
plt.axis('tight');
你还可以实现更高级的配置,例如让屏幕上显示的图形分辨率为 1 :1,x 轴单位长度与 y 轴单位长度相等。
plt.plot(x, np.sin(x))
plt.axis('equal');
关于 plt.axis() 方法设置坐标轴上下限和其他更多功能,请参考 plt.axis() 的程序文档。
3 设置图形标签
介绍设置图形标签的方法:图形标题
、坐标轴标题
、简易图例
。
图形标题与坐标轴标题是最简单的标签,快速设置方法如下所示:
plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)");
你可以通过优化参数来调整这些标签的位置、大小和风格。若想获取更多的信息,请参考Matplotlib 文档和对应函数的程序文档。
在单个坐标轴上显示多条线时,创建图例显示每条线是很有效的方法。Matplotlib 内置了一个简单快速的方法,可以用来创建图例,那就是plt.legend()
。虽然有不少用来设置图例的办法,但我觉得还是在 plt.plot 函数中用 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();
你会发现, plt.legend() 函数会将每条线的标签与其风格、颜色自动匹配。关于通过 plt.legend() 设置图例的更多信息,请参考相应的程序文档。
4 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');
备注
各位老铁来个“关注”、“点赞”、“评论”三连击哦
各位老铁来个“关注”、“点赞”、“评论”三连击哦
各位老铁来个“关注”、“点赞”、“评论”三连击哦