简单线形图形¶
所有图形中,最简单的是线性方程 $y = f(x)$可视化。一个简单的线型图可以由下面代码给出:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("seaborn-v0_8-whitegrid")
plt.style.available #可以使用的风格查看
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'petroff10', 'seaborn-v0_8', 'seaborn-v0_8-bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep', 'seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-whitegrid', 'tableau-colorblind10']
可以将上面列出的风格通过下面格式进行设定。如:
#plt.style.use("ggplot")
使用Matplotlib画图,都需要先创建一个图形画布和一个坐标图形。
fig = plt.figure()
ax = plt.axes()
#plt.show()
在Matplotlib中,figure ( plt.Figure类的一个实例) 可以理解为能够容纳各种坐标轴,图形,文字,标签的容器; axes ( plt.Axes类的一个实例) 是一个带有刻度和标签的矩形,并最终包含所有可视化的图形元素。
一旦创建了axes对象,我们可以使用ax.plot 函数绘制图形。
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x));
如上节所说,我们也可以使用pyplot接口绘制图形。这时,图形和坐标轴都在底层执行完成了。
plt.plot(x, np.sin(x));
如果需要画多条曲线,可以使用多次 plot 函数:
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x));
调整图形:线条的颜色与风格¶
第一次对图形的调整是其颜色与风格。 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 从 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 颜色名称
如果不指定颜色,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');
# For short, you can use the following codes:
plt.plot(x, x + 4, linestyle='-') # 实线 solid
plt.plot(x, x + 5, linestyle='--') # 虚线 dashed
plt.plot(x, x + 6, linestyle='-.') # 点画线 dashdot
plt.plot(x, x + 7, linestyle=':'); # 点线 dotted
如果希望简单一些,可以将 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'); # 红色点线
更多关于颜色与线段风格的内容,请参考plt.plot()文档。
调整图形: 图像边界¶
Matplotlib 会根据图形状况自动调整图像边缘,但有时候为了控制更好,可以使用 plt.xlim() 和 plt.ylim() 方法来调整图像的边界:
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5);
如果你希望图像倒着显式,只需要将两个参数的前后值倒过来即可。
plt.plot(x, np.sin(x))
plt.xlim(10, 0)
plt.ylim(1.2, -1.2);
还有一个有用的相关功能方法,就是对坐标轴进行设置,使用 plt.axis()方法 (注意 axes 与axis 差异,前者是更多指图像元素,后者是指坐标轴).
plt.axis()方法允许设置 x 和 y 边界,使用的格式为: [xmin, xmax, ymin, ymax]:
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');
如果希望两个轴上的单位显式相同,x与y之间的图形显式比例为1:1,可以如下设置:
plt.plot(x, np.sin(x))
plt.axis('equal');
设置图形标签¶
#汉字显示设置
plt.rcParams['font.sans-serif'] =['SimHei'] #设置字体为SimHei
plt.rcParams['axes.unicode_minus'] = False #负号显式正常
plt.plot(x, np.sin(x))
#plt.title("A Sine Curve")
plt.title("正弦函数曲线")
plt.xlabel("x")
plt.ylabel("sin(x)");
当图形有多个线条,往往需要一个图例。使用 plt.legend() 方法来表示。一个最简单的办法是在语句中设置 label 关键字,来确定图例内容。当然图例也支持$\ LaTeX$格式:
plt.plot(x, np.sin(x), '-g', label='$sin(\\alpha)$')
plt.plot(x, np.cos(x), ':b', label='$cos(\\beta)$')
plt.axis('equal')
plt.legend();
plt.plot(x, np.sin(x), '-g',label='A')
plt.plot(x, np.cos(x), ':b',label='B')
plt.axis('equal')
plt.legend();
附读: Matplotlib 陷阱¶
大部分plt 函数图形可以直接转换到ax 方法中, (如 plt.plot() → ax.plot(), plt.legend() → ax.legend(),等等), 但有一些情况并非如此。
如在设置边界 、设置标签、设置题头等内容上,不是直接转化的。
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');