Python使用scatter函数绘制点在线的上层

前言

前几天在QQ群里发现有人问这样一个问题,使用Python的matplotlib库绘制图形时,函数 scatter() 绘制的点总是在 plot() 函数绘制的线下边,看起来样子很丑,大概就是下图这个样子,问有没有方法让点显示到线的上面。

drawnormal

看到这个问题一开始以为是绘制顺序的原因,调整 scatter() 函数和 plot() 函数的调用顺序并没有达到预想的效果,点还是在线的下面,原来一直没注意这个问题,是因为我一直把线和标注用的点使用了同一种颜色,所有看不出来是谁覆盖了谁,现在抛出这个问题居然让人有点不知所措,直觉上认定肯定有个属性可以设置这个显示顺序,但究竟是图的属性?坐标轴的属性?还是函数的参数呢?这个还需要查一查。

解决办法

最后经过一顿查找发现函数 scatter()plot() 都有个参数 zorder,这时候才恍然大悟,做游戏界面开发时常常使用这个参数来控制UI的层级,现在怎么突然忘了呢,赶紧设置一下发现与原来在游戏开发中的参数含义相同,zorder这个整数越大,显示的时候越靠上,所以写了下面的测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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值较大,所以放到上面绘制,效果如下:

drawpointonline

总结

  1. 帮助他人解决问题是一个自我提升的好机会
  2. 有很多我们认为很简单的事情,其实并不是我们想的那样

代码文件

前后图例代码对比-传送门

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客