前几天在QQ群里发现有人问这样一个问题,使用Python的matplotlib库绘制图形时,函数 scatter()
绘制的点总是在 plot()
函数绘制的线下边,看起来样子很丑,大概就是下图这个样子,问有没有方法让点显示到线的上面。
看到这个问题一开始以为是绘制顺序的原因,调整 scatter()
函数和 plot()
函数的调用顺序并没有达到预想的效果,点还是在线的下面,原来一直没注意这个问题,是因为我一直把线和标注用的点使用了同一种颜色,所有看不出来是谁覆盖了谁,现在抛出这个问题居然让人有点不知所措,直觉上认定肯定有个属性可以设置这个显示顺序,但究竟是图的属性?坐标轴的属性?还是函数的参数呢?这个还需要查一查。
最后经过一顿查找发现函数 scatter()
和 plot()
都有个参数 zorder
,这时候才恍然大悟,做游戏界面开发时常常使用这个参数来控制UI的层级,现在怎么突然忘了呢,赶紧设置一下发现与原来在游戏开发中的参数含义相同,zorder
这个整数越大,显示的时候越靠上,所以写了下面的测试代码:
import numpy as np
import matplotlib.pyplot as plt
def draw_point_on_line():
plt.title("draw point on line")
plt.xlabel("x-axis")
plt.ylabel("y-axis")
X = np.linspace(1, 100, 10, endpoint=True)
Y = np.random.randint(60, 100, len(X))
plt.plot(X, Y, color ='blue', linewidth=3.5, zorder=1) # 在第一层画线
plt.scatter(X, Y, 50, color ='red', zorder=2) # 在第二层画点
plt.show()
这次终于正常了,因为scatter()
函数中的zorder
值较大,所以放到上面绘制,效果如下:
前后图例代码对比-传送门