You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选matplotlib图表中指定斜线下的所有数据点?

解决斜线区域数据点着色问题

要给斜线下的点设置不同颜色,核心是先明确斜线的数学方程,再根据点的坐标判断是否落在目标区域。以下是针对你示例代码的完整解决方案:

步骤说明

  1. 转换数据类型:将元组形式的x、y转为numpy数组,支持布尔索引操作(和你之前处理矩形区域的逻辑一致);
  2. 推导斜线方程:示例中的斜线经过(6,9)和(11,16),用两点式推导方程为:
    y = (7/5)*(x - 6) + 9
    
    简化后是 y = 1.4x + 0.6,两种形式都可以用来判断点的位置;
  3. 构建区域过滤条件:结合左侧的水平线y=9(x≤6的区域)和斜线(x>6的区域),组合出斜线下区域的判断条件;
  4. 分区域着色:分别绘制符合条件的点和剩余点,设置不同颜色。

完整代码

import matplotlib.pyplot as plt
import numpy as np

# 转换为numpy数组,支持布尔索引
x = np.array((6, 4, 10, 7, 11, 9, 7.5, 4.5, 6.5))
y = np.array((10, 7, 13, 10, 9, 10, 11.5, 8.6, 14))

# 推导斜线方程:经过(6,9)和(11,16)
def line_eq(x_val):
    return (7/5)*(x_val - 6) + 9

# 构建斜线下区域的过滤条件
# x≤6时,y < 9;x>6时,y < 斜线对应的y值
below_filter = ((x <= 6) & (y < 9)) | ((x > 6) & (y < line_eq(x)))

# 绘制斜线下的点(比如设为红色)
plt.scatter(x[below_filter], y[below_filter], color='red', label='斜线下方')
# 绘制剩余的点(默认蓝色)
plt.scatter(x[~below_filter], y[~below_filter], color='blue', label='斜线及上方')

# 绘制原有的辅助线
plt.axhline(y=9, xmax=.3, color='black', linestyle='--')
x_1, y_1 = [6, 11], [9, 16]
plt.plot(x_1, y_1, linestyle='--', c='black')

plt.legend()
plt.show()

关键细节

  • 如果你实际数据中的斜线参数不同,只需要修改line_eq函数里的方程即可;
  • 布尔索引的逻辑和你之前处理(x < 4) & (y > 28.81)的思路一致,只是把矩形区域的判断换成了斜线的分段判断;
  • 直接使用布尔数组组合条件即可,无需额外封装,逻辑更直观。

内容的提问来源于stack exchange,提问作者Jessica Berkheimer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:23