代码之家  ›  专栏  ›  技术社区  ›  Mohammad ElNesr

如何使用颜色贴图为等高线标签上色?

  •  1
  • Mohammad ElNesr  · 技术社区  · 7 年前

    我有一个等高线图,我用名为 YlGn 较暗字段中的标签显示不好,因为它们是黑色的。

    是否有一种方法可以按照所用颜色贴图的相反方向给标签上色?i、 例如,将0.39标签涂成白色,将0.15标签涂成深绿色,并相应地将两者之间的标签涂成绿色。

    enter image description here

    我用过 CS3 = plt.contourf(X, Z, M, levels, cmap=plt.cm.YlGn, extend='both') 对于填充轮廓和 CS4 = plt.contour(CS3, colors=('k',), linewidths=(1,)) 对于线条轮廓 plt.clabel(CS4, linewidths=2, fmt='%2.2f', colors='k', fontsize=14) 用于标签。

    然而,当我试图添加 cmap=plt.cm.YlGn_r 并删除了 colors='k' 对于标签(反转颜色),它什么也没做。

    注: 此处使用的代码部分取自 this documentation page ,但进行了一些修改以适合我的数据。

    以下是一些可以在Jupyter笔记本上尝试的数据:

    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    matplotlib.rcParams['xtick.direction'] = 'out'
    matplotlib.rcParams['ytick.direction'] = 'out'
    
    delta = 0.025
    x = np.arange(1.0, 3.0, delta)
    y = np.arange(1.0, 2.0, delta)
    X, Y = np.meshgrid(x, y)
    Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
    Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
    # difference of Gaussians
    Z = 10.0 * (Z2 - Z1)
    plt.figure()
    CS = plt.contour(X, Y, Z, cmap=plt.cm.YlGn_r)
    CS2 = plt.contourf(X, Y, Z, color='k')
    plt.clabel(CS, fontsize=10,color='k')
    plt.title('Simplest default with labels')
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   ImportanceOfBeingErnest    7 年前

    我猜你把论点搞混了 contour contourf . 将反向颜色贴图应用于等高线效果良好。

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import mlab 
    
    delta = 0.025
    x = np.arange(1.0, 3.0, delta)
    y = np.arange(1.0, 2.0, delta)
    X, Y = np.meshgrid(x, y)
    Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
    Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
    # difference of Gaussians
    Z = 10.0 * (Z2 - Z1)
    plt.figure()
    
    CS2 = plt.contourf(X, Y, Z, cmap=plt.cm.YlGn_r)
    CS = plt.contour(X, Y, Z, cmap=plt.cm.YlGn)
    plt.clabel(CS, fontsize=10)
    
    plt.title('Simplest default with labels')
    
    plt.show()
    

    enter image description here

    要对线条使用与填充相同的颜色贴图,但对标签使用不同的颜色贴图,需要手动定义颜色。但是使用现有的级别可以帮助您非常高效地完成这项工作。

    CS2 = plt.contourf(X, Y, Z, cmap=plt.cm.YlGn_r)
    CS = plt.contour(CS2, cmap=plt.cm.YlGn_r)
    plt.clabel(CS, fontsize=10, colors=plt.cm.Reds(CS.norm(CS.levels)))
    

    enter image description here