Matplotlib绘图中消除标记点重叠处的折线显示
解决Matplotlib标记与折线重叠的问题
这个需求很常见,我之前做可视化的时候也遇到过——默认的plot同时画折线和标记时,标记会被下方的折线部分覆盖,影响视觉效果。这里给你两种简单有效的实现方式:
方法一:分开绘制折线和标记
最直观的思路就是把折线和标记拆成两个独立的绘图元素:先画不带标记的折线,再画不带折线的标记。这样标记会自动叠在折线上方,完全不会有“被覆盖”的感觉,看起来就是标记被折线连接起来。
修改后的代码如下:
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots(figsize=(6,6)) values = np.random.normal(loc=0, scale=1, size=10) x = range(10) # 第一步:绘制纯折线(无标记) ax.plot(x, values, color='red', linestyle='-') # 第二步:绘制纯标记(无折线) ax.plot(x, values, 'r^', markersize=15, alpha=0.4)
方法二:使用scatter绘制标记
如果你习惯用scatter处理散点标记,也可以用plot画折线,再用scatter画标记,效果是一样的。注意scatter的s参数是标记的面积,所以要对应markersize=15的话,需要传入15**2(也就是225):
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots(figsize=(6,6)) values = np.random.normal(loc=0, scale=1, size=10) x = range(10) # 绘制折线 ax.plot(x, values, color='red') # 绘制散点标记 ax.scatter(x, values, marker='^', color='red', s=225, alpha=0.4)
这两种方法都能完美实现你的需求:折线只出现在标记之间,标记清晰展示,看起来就像是折线在连接标记,而不是覆盖在标记上。
内容的提问来源于stack exchange,提问作者Ian Gilman
相关产品推荐
相关产品推荐

