使用Matplotlib时,有时候想显示的网格线与数据显示的曲线不一样,有明显的对比效应,最先想到的就是使用颜色。
在这里还是使用plt.grid函数,这个函数的定义如下:
matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)
由于支持的参数很多,这里主要介绍这几个:
- b: 这个参数是表示是否显示网格线。如果这个参数为None,但后面有别的参数,说明想显示网格线,就会自动设置这个参数为True。
-
which:表示主刻度的网格线显示,还是次刻度的网格线显示,还是两者都显示。可选的参数有:’major’, ‘minor’, ‘both’。
-
axis:设置X轴的网格线显示,还是Y轴的网格线显示,还是两者都显示,可选的参数有:’both’, ‘x’, ‘y’。
-
kwargs:表示可以传递给函数Line2D的参数,主要修改线的属性,比如线的颜色、线的粗细、线的形状。在上面的例子里,就是使用color = ‘b’来设置线的颜色。
由于刻度的多与少,就决定的网格线的多与少,因此需要学会控制坐标系的刻度控制,就需要使用函数:plt.xticks和plt.yticks,这两个函数用来控制刻度的数目和标记的值。如下面的例子:
例子的源码如下:
import matplotlib.pyplot as plt
import numpy as np
x1, x2 = -10, 10
y1, y2 = 10, -10
fig = plt.figure('deepinout')
plt.axis([x1, x2, y1, y2]) #
plt.grid(True, color = 'b')
dx = 5
dy = -2
plt.xticks(np.arange(x1, x2, dx))
plt.yticks(np.arange(y1, y2, dy))
plt.show()
在这个例子里,可以看到X轴与Y轴的坐标刻度间隔会不一样,X轴是间隔5个单位,而Y轴是间隔两个单位。显然看到调整刻度的间隔,就可以控制网格线的多少。
有时候想要更密的网格线,如果按照上面的想法,就是把坐标系里的间隔改为更小,不过这样就会带来一个问题,就是标记太多,导致刻度的文字说明会重叠,这样看起来就比较麻烦。这样就要换一个想法了,采用自己来绘制网格线,要实现这个功能需要使用函数plt.scatter。
下面的例子就来演示scatter的使用:
import matplotlib.pyplot as plt
import numpy as np
x1, x2 = -10, 10
y1, y2 = -10, 10
fig = plt.figure('deepinout.com')
plt.axis([x1, x2, y1, y2])
dx = 0.5
dy = 0.5
for x in np.arange(x1, x2, dx):
for y in np.arange(y1, y2, dy):
plt.scatter(x, y, s = 1, color = 'grey')
plt.show()
结果显示如下:
通过这样的方式,就可以自己来定义不一样的网格线,达到随心所欲地控制。这里s=1是表示点的大小,如果想改小,数值可以改为0.5, 如果想改更大,比如修改为5,具体多大才合适,取决于你的图里曲线的对比效果。