【问题标题】:Seaborn Heatmap Subplots - keep axis ratio consistentSeaborn 热图子图 - 保持轴比一致
【发布时间】:2017-07-31 10:32:38
【问题描述】:

如果我有以下代码:

import seaborn 
import matplotlib.pyplot as plt
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
f,(ax1,ax2,ax3) = plt.subplots(1,3,sharey=True)
g1 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax1)
g1.set_ylabel('')
g1.set_xlabel('')
g2 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax2)
g2.set_ylabel('')
g2.set_xlabel('')
g3 = sns.heatmap(flights,cmap="YlGnBu",ax=ax3)
g3.set_ylabel('')
g3.set_xlabel('')

输出以下内容 -

如何调整子图以使 g3 轴与 g1、g2 轴的宽度相同。由于我没有在前两个轴上添加颜色条,所以seaborn将第三个轴向下收缩以使整个图形保持一致。这是可以理解的。

我想要这个:

也许我需要制作一个 4 面板子图,其中第四个面板仅包含颜色条?

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    确实可以创建 4 个轴,其中第四个轴将包含颜色条。您可以使用 cbar_ax 参数告诉热图在哪个轴上绘制颜色条。为了创建具有良好比例的轴,您可以使用gridspec_kw 参数到subplots。那么问题是轴将与颜色条共享y缩放,因此我们需要关闭sharey并使用ax1.get_shared_y_axes().join(ax2,ax3)手动共享前三个轴。这反过来会创建不需要的轴标签,需要将其关闭。

    import seaborn  as sns
    import matplotlib.pyplot as plt
    flights = sns.load_dataset("flights")
    flights = flights.pivot("month", "year", "passengers")
    f,(ax1,ax2,ax3, axcb) = plt.subplots(1,4, 
                gridspec_kw={'width_ratios':[1,1,1,0.08]})
    ax1.get_shared_y_axes().join(ax2,ax3)
    g1 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax1)
    g1.set_ylabel('')
    g1.set_xlabel('')
    g2 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax2)
    g2.set_ylabel('')
    g2.set_xlabel('')
    g2.set_yticks([])
    g3 = sns.heatmap(flights,cmap="YlGnBu",ax=ax3, cbar_ax=axcb)
    g3.set_ylabel('')
    g3.set_xlabel('')
    g3.set_yticks([])
    
    # may be needed to rotate the ticklabels correctly:
    for ax in [g1,g2,g3]:
        tl = ax.get_xticklabels()
        ax.set_xticklabels(tl, rotation=90)
        tly = ax.get_yticklabels()
        ax.set_yticklabels(tly, rotation=0)
    
    plt.show()
    

    【讨论】:

    • 太棒了!你能告诉我最后一件事吗? axcb 的哪种方法可以用来设置标签? axcb.set_label() 似乎什么也没做。
    • 我想你的意思是axcb.set_ylabel("Some label")
    猜你喜欢
    • 2021-03-10
    • 2016-03-17
    • 2021-08-03
    • 1970-01-01
    • 2017-04-16
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多