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
相关产品推荐
相关产品推荐

