代码之家  ›  专栏  ›  技术社区  ›  Joel

如何将色条放入matplotlib图例中

  •  0
  • Joel  · 技术社区  · 6 年前

    我有代码生成这个数字: enter image description here

    这是我的密码:

    import matplotlib.pyplot as plt
    import matplotlib.colors as colors
    import matplotlib.cm as cmx
    
    
    plt.clf()
    plt.plot([0,100], [0,100], '--', linewidth=3, color='k', label = 'start')
    plt.plot([100,100],[0,100], '-.', linewidth=3, color = 'k', label = 'stop')
    
    
    
    jet = plt.get_cmap('jet') 
    cNorm  = colors.Normalize(vmin=0, vmax=99)
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
    
    for offset in range(1,100):
        colorVal = scalarMap.to_rgba(offset)
        plt.plot([offset, 100], [0,100], color=colorVal)
    
    plt.legend()
    plt.show()
    

    因此,理想情况下,我会有一些像一个标准的色条,范围从0到100,但出现在图例与标签 'offset' .

    1 回复  |  直到 6 年前
        1
  •  4
  •   recurseuntilfor    4 年前

    下面是一些基于ImportanceOfBeingErnest的注释方法(2)的代码。

    import matplotlib.pyplot as plt
    import matplotlib.colors as colors
    import matplotlib.cm as cmx
    from matplotlib.patches import Rectangle
    
    fig, ax = plt.subplots(1)
    
    plt.clf()
    plt.plot([0,100], [0,100], '--', linewidth=3, color='k', label = 'start')
    plt.plot([100,100],[0,100], '-.', linewidth=3, color = 'k', label = 'stop')
    
    jet = plt.get_cmap('jet')
    cNorm  = colors.Normalize(vmin=0, vmax=99)
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
    scalarMap.set_array([])
    
    for offset in range(1,100):
        colorVal = scalarMap.to_rgba(offset)
        plt.plot([offset, 100], [0,100], color=colorVal)
    
    plt.gca().add_patch(Rectangle((0.1, 45), 40, 55, edgecolor='gray',
                                                linewidth=3, fill=False))
    plt.gca().text(25, 90, "-- start")
    plt.gca().text(25, 80, "-. stop")
    plt.gca().text(15, 50, "  offset")
    
    cax = fig.add_axes([0.18, 0.48, 0.03, 0.35])
    
    plt.colorbar(scalarMap, cax = cax, ticks=[range(0, 100, 10)],
                                                orientation='vertical')
    
    plt.show()
    

    screen shot