【问题标题】:matplotlib: reduce axes width in subplotsmatplotlib:减少子图中的轴宽度
【发布时间】:2017-05-16 13:10:28
【问题描述】:

我有一个 matplotlib 条形图,这些条形图通过颜色图根据一些规则进行着色。我需要主轴右侧的颜色条,所以我添加了一个新轴

fig, (ax, ax_cbar) = plt.subplots(1,2)

并设法在 ax_bar 轴中绘制我的颜色条,而我的数据显示在 ax 轴中。现在我需要减小 ax_bar 的宽度,因为它看起来像这样:

我该怎么办?

【问题讨论】:

    标签: python matplotlib bar-chart colorbar colormap


    【解决方案1】:

    使用subplots 将始终平分您的数字。您可以通过多种方式手动划分您的图形。我的首选方法是使用subplot2grid

    在此示例中,我们将图形设置为 1 行和 10 列。然后我们将ax 设置为 row,column = (0,0) 的起点,宽度为 9 列。然后将ax_cbar 设置为从 (0,9) 开始,默认宽度为 1 列。

    import matplotlib.pyplot as plt
    
    fig = plt.figure(figsize=(8,6))
    
    num_columns = 10
    ax = plt.subplot2grid((1,num_columns), (0,0), colspan=num_columns-1)
    ax_cbar = plt.subplot2grid((1,num_columns), (0,num_columns-1))
    

    【讨论】:

      【解决方案2】:

      添加颜色条的常用方法是简单地将其放在轴旁边:

      fig.colorbar(sm)
      

      其中fig 是图形,sm 是颜色映射所指的可映射标量。在酒吧的情况下,您需要自己创建这个ScalarMappable。除此之外,无需复杂地创建多个轴。

      import matplotlib.pyplot as plt
      import matplotlib.colors
      import numpy as np
      
      fig , ax = plt.subplots()
      
      x = [0,1,2,3]
      y = np.array([34,40,38,50])*1e3
      norm = matplotlib.colors.Normalize(30e3, 60e3)
      ax.bar(x,y, color=plt.cm.plasma_r(norm(y)) )
      ax.axhline(4.2e4, color="gray")
      ax.text(0.02, 4.2e4, "42000", va='center', ha="left", bbox=dict(facecolor="w",alpha=1),
              transform=ax.get_yaxis_transform())
      
      sm = plt.cm.ScalarMappable(cmap=plt.cm.plasma_r, norm=norm)
      sm.set_array([])
      
      fig.colorbar(sm)
      plt.show()
      


      如果您确实想自己为颜色条创建一个特殊的轴,最简单的方法是将调用中的宽度设置为subplots

      fig , (ax, cax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios" : [10,1]})
      

      然后将颜色条放到cax 轴上,

      fig.colorbar(sm, cax=cax)
      


      请注意,已经针对此家庭作业提出了以下问题:

      【讨论】:

      • 使用width_ratios 处理多个海岸热图。在那里,我想这是最简单的方法。很好的答案。
      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多