【问题标题】:Matplotlib Half color axisMatplotlib 半色轴
【发布时间】:2014-09-04 22:36:26
【问题描述】:

我正在使用 matplotlib 制作一些绘图,但遇到了一些需要帮助的困难。

问题 1) 为了保持一致的颜色方案,我只需要使用一半的颜色轴。只有正值,所以我希望零值为绿色,中间值为黄色,最高值为红色。与此最匹配的配色方案是 gist_rainbow_r,但我只想要它的上半部分。

问题 2)我似乎无法弄清楚如何让绘图右侧的颜色栏显示出来,或者如何让我标记轴。

如果有帮助,我正在使用最新版本的 Anaconda 和 matplotlib 的 latext 版本

cmap = plt.get_cmap('gist_rainbow_r')
edosfig2 = plt.figure(2)
edossub2 = edosfig.add_subplot(1,1,1)
edossub2 = plt.contourf(eVec,kints,smallEDOS,cmap=cmap)
edosfig2.show()

【问题讨论】:

    标签: python matplotlib colorbar


    【解决方案1】:

    如果您有一组特定的颜色要用于颜色图,您可以根据这些颜色进行构建。例如:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.colors import LinearSegmentedColormap
    
    cmap = LinearSegmentedColormap.from_list('name', ['green', 'yellow', 'red'])
    
    # Generate some data similar to yours
    y, x = np.mgrid[-200:1900, -300:2000]
    z = np.cos(np.hypot(x, y) / 100) + 1
    
    fig, ax = plt.subplots()
    
    cax = ax.contourf(x, y, z, cmap=cmap)
    cbar = fig.colorbar(cax)
    cbar.set_label('Z-Values')
    
    plt.show()
    


    但是,如果您确实只想要某个特别复杂的颜色图的上半部分,则可以通过在您感兴趣的范围内评估颜色图来复制其中的一部分。例如,如果您想要“上”半部分,你会从 0.5 到 1 评估它:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.colors import LinearSegmentedColormap
    
    # Evaluate an existing colormap from 0.5 (midpoint) to 1 (upper end)
    cmap = plt.get_cmap('gist_earth')
    colors = cmap(np.linspace(0.5, 1, cmap.N // 2))
    
    # Create a new colormap from those colors
    cmap2 = LinearSegmentedColormap.from_list('Upper Half', colors)
    
    y, x = np.mgrid[-200:1900, -300:2000]
    z = np.cos(np.hypot(x, y) / 100) + 1
    
    fig, axes = plt.subplots(ncols=2)
    for ax, cmap in zip(axes.flat, [cmap, cmap2]):
        cax = ax.imshow(z, cmap=cmap, origin='lower',
                        extent=[x.min(), x.max(), y.min(), y.max()])
        cbar = fig.colorbar(cax, ax=ax, orientation='horizontal')
        cbar.set_label(cmap.name)
    
    plt.show()
    

    【讨论】:

    • 非常感谢。最后一个问题。您如何使过渡更加连续,就像内置的颜色图一样。这些都很好,但过渡非常突然。
    • @RobertHembree - 除非我误解了什么,否则它们看起来很突然,因为您使用的是contourf(具有一定数量的级别)而不是imshow(连续的) .还是我误解了你的要求?
    • 按照您的建议使用 imshow 似乎已经解决了我的问题。我试图从文档中获取所有这些内容。非常感谢。现在一切正常。
    • +1 表示您帖子的后半部分。正是我正在寻找的,当只为只有正数的图采用 bwr-colormap 的上半部分(即白色到红色的过渡)时,对于具有正数和负数的图,采用相同的颜色编码。
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多