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

如何绘制灰度对应高密度区、虚线等高线对应低密度区的密度场图?

对数密度场图绘制方案
  • 核心思路:通过灰度热力底图+分层等高线的组合实现需求,用matplotlib的多个函数配合,替代单一的contour():
  1. 生成对数密度场数据
    先对原始数据做核密度估计(KDE),转换为网格上的对数密度值:

    import numpy as np
    from scipy.stats import gaussian_kde
    import matplotlib.pyplot as plt
    
    # 假设原始数据是二维数组x, y
    data = np.vstack([x, y])
    kde = gaussian_kde(data)
    
    # 创建网格
    xi, yi = np.mgrid[x.min():x.max():100j, y.min():y.max():100j]
    zi = kde(np.vstack([xi.flatten(), yi.flatten()]))
    log_zi = np.log(zi.reshape(xi.shape))  # 取对数得到对数密度场
    
  2. 绘制灰度高密度底图
    用pcolormesh()绘制灰度热力图,反转色让亮区对应高密度:

    plt.pcolormesh(xi, yi, log_zi, cmap='gray_r', shading='auto')
    
  3. 分层绘制等高线

    • 平均密度线:计算对数密度的均值,用实线绘制
    • 低密度等高线:设定低密度阈值(比如均值减1倍标准差),用虚线绘制
    # 绘制平均密度实线
    mean_density = np.mean(log_zi)
    plt.contour(xi, yi, log_zi, levels=[mean_density], linestyles='solid', colors='black')
    
    # 绘制低密度虚线等高线(可多设几个低于阈值的levels)
    low_density_threshold = mean_density - np.std(log_zi)
    plt.contour(xi, yi, log_zi, levels=np.linspace(log_zi.min(), low_density_threshold, 3), 
                linestyles='dashed', colors='gray')
    
  4. 细节调整
    可按需添加颜色条、坐标轴标签,关闭多余边框等,让图更贴合参考样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:22:07