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

Matplotlib中函数曲线区域内数据点的散点图着色方法

解决方案:在Matplotlib中绘制cos(x)并颜色编码散点

没问题,咱们可以通过以下步骤实现你要的效果:先绘制cos(x)曲线,再判断每个散点是否落在曲线下方,最后根据判断结果给散点赋予不同颜色。

完整代码示例

import numpy as np
import matplotlib.pyplot as plt

# 1. 绘制cos(x)曲线
x_curve = np.linspace(0, np.pi, 100)  # 增加点数让曲线更平滑
y_curve = np.cos(x_curve)
plt.plot(x_curve, y_curve, label='cos(x)', color='darkblue', linewidth=2)

# 2. 定义散点数据
x_points = np.array([2, 0.9, 2.6, 3.1])
y_points = np.array([0.1, 0.4, 0.5, 0.2])

# 3. 判断每个散点是否在曲线下方
# 计算每个散点x对应的cos(x)值,再和散点的y值比较
is_below = y_points <= np.cos(x_points)

# 4. 颜色编码绘制散点
# 方法一:用颜色列表批量绘制
point_colors = ['crimson' if below else 'limegreen' for below in is_below]
plt.scatter(x_points, y_points, c=point_colors, s=120, edgecolor='black', zorder=5)

# 方法二:分开绘制两类点(图例更清晰)
# plt.scatter(x_points[is_below], y_points[is_below], color='crimson', s=120, edgecolor='black', label='Below cos(x)', zorder=5)
# plt.scatter(x_points[~is_below], y_points[~is_below], color='limegreen', s=120, edgecolor='black', label='Above cos(x)', zorder=5)

# 5. 美化图表
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.title('cos(x) Curve with Color-Coded Scatter Points', fontsize=14)
plt.legend(fontsize=10)
plt.grid(True, alpha=0.3)
plt.show()

关键步骤解释

  • 曲线绘制:我把np.linspace的点数从默认50改成100,让cos(x)曲线更平滑;同时给曲线加了线宽和深色,让它更突出。
  • 点的判断逻辑:核心是is_below = y_points <= np.cos(x_points)——对每个散点的x值,计算对应的cos(x),然后比较散点的y值是否小于等于这个值,得到一个布尔数组,标记每个点是否在曲线下方。
  • 颜色编码:
    • 方法一用列表推导式生成颜色列表,一次性绘制所有散点,适合快速实现;
    • 方法二分开绘制两类点,能在图例里明确区分“曲线下方”和“曲线上方”的点,可读性更强,你可以根据需求选一种。
  • 细节优化:给散点加了黑色边缘(edgecolor='black')和更高的层级(zorder=5),让散点不会被曲线遮挡;添加网格和合适的字体大小,提升图表美观度。

运行代码后,你就能看到蓝色的cos(x)曲线,以及红色(下方)、绿色(上方)的散点啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:29