【问题标题】:How to plot pcolor colorbar in a different subplot - matplotlib如何在不同的子图中绘制 pcolor 颜色条 - matplotlib
【发布时间】:2013-09-23 07:48:16
【问题描述】:

我正在尝试将我的情节拆分为不同的子情节。我想要实现的是在不同的子情节中放置一个子情节的颜色条。 现在我正在使用:

# first graph
axes = plt.subplot2grid((4, 2), (0, 0), rowspan=3)
pc = plt.pcolor(df1, cmap='jet')

# second graph
axes = plt.subplot2grid((4, 2), (3, 0))
plt.pcolor(df2, cmap='Greys')

# colorbar
plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc) 

但结果如下(注意颜色条左侧不需要的空图):

如何只打印颜色条而不打印左图?

谢谢

【问题讨论】:

    标签: python matplotlib plot subplot colorbar


    【解决方案1】:

    我认为您应该使用 ax 而不是 cax

    # colorbar
    axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3)
    plt.colorbar(pc, ax=axes)
    

    【讨论】:

    • 否,cax 设置绘制颜色条的坐标轴,ax 仅用于确定如果未传入cax,则从哪些坐标轴中窃取空间。
    【解决方案2】:

    colorbar() 接受 cax 关键字参数,允许您指定将在其上绘制颜色条的 axes 对象。

    在您的情况下,您可以将颜色条调用更改为以下内容:

    # colorbar
    axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3)
    plt.colorbar(pc, cax=axes)
    

    这会占用subplot2grid给的全部空间;您可以通过让主轴占据比颜色条轴更多的列,或者通过显式设置gridspec 来调整它以使其更合理。例如,您的身材可能更容易通过以下方式进行调整:

    from matplotlib import gridspec
    gs = gridspec.GridSpec(2, 2, height_ratios=(3, 1), width_ratios=(9, 1))
    
    # first graph
    axes = plt.subplot(gs[0,0])
    pc = plt.pcolor(df1, cmap='jet')
    
    # second graph
    axes = plt.subplot(gs[1,0])
    plt.pcolor(df2, cmap='Greys')
    
    # colorbar
    axes = plt.subplot(gs[0,1])
    plt.colorbar(pc, cax=axes)
    

    然后您可以根据自己的喜好更改height_ratioswidth_ratios

    【讨论】:

    • 它可以工作,但颜色条水平放大。如何保持相同的默认比率?我尝试传递 aspect 关键字但它不被接受,所以我回退到显式增加图形的列数..
    • 我用另一种方法在答案中添加了一个部分,以使颜色条轴占用更少的空间。
    • 没问题 :) 绘图快乐!
    • 只有一件事:第二个子图调用缺少 gs 变量
    • 您能否将 plt 调用更改为 OO 调用,因为您已经在创建和跟踪轴对象?我知道我可以自己编辑它,但这似乎很粗鲁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2020-07-22
    相关资源
    最近更新 更多