【问题标题】:How to resize the width of the plot with a colorbar in multiplot?如何在多图中使用颜色条调整图的宽度?
【发布时间】:2020-02-03 05:51:56
【问题描述】:

我遇到了多图中的颜色条问题。 添加颜色条时,这两个图未对齐。 如果我删除颜色条,这些图就会很好地对齐。

如何调整多情节中的情节? 我只想调整下图或上图的宽度以对齐图。 这是我的代码。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.gridspec as gridspec

fig = plt.subplots(2,figsize=(5, 8))
gs  = gridspec.GridSpec(2, 1, height_ratios=[ 3,2],hspace=0.0)

ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])

xx   = np.linspace(0,5,50)
yy   = np.linspace(0,5,50)
X, Y = np.meshgrid(xx, yy)
T = X**2 

norm = mpl.colors.Normalize(vmin=0,vmax=10)
pcm=ax1.pcolormesh(X,Y,T, norm =norm)
plt.colorbar(pcm, orientation="vertical", ax =ax1)

ax2.plot(xx, xx**2)

结果如下。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您也可以尝试水平条方向。

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import matplotlib.gridspec as gridspec
    
    fig = plt.subplots(2,figsize=(5, 8))
    gs  = gridspec.GridSpec(2, 1, height_ratios=[ 3,2],hspace=0.0)
    
    ax1 = plt.subplot(gs[0])
    ax2 = plt.subplot(gs[1])
    
    xx   = np.linspace(0,5,50)
    yy   = np.linspace(0,5,50)
    X, Y = np.meshgrid(xx, yy)
    T = X**2 
    
    norm = mpl.colors.Normalize(vmin=0,vmax=10)
    pcm=ax1.pcolormesh(X,Y,T, norm =norm)
    plt.colorbar(pcm, orientation="horizontal", ax =ax1, pad=0.1)
    
    ax2.plot(xx, xx**2)
    

    【讨论】:

      【解决方案2】:

      来自Positioning the Color Bar 的回答我们可以添加一个新轴没有网格规范

      import numpy as np
      import matplotlib.pyplot as plt
      %matplotlib inline
      
      fig = plt.figure(figsize=(5,8))
      ax1 = fig.add_subplot(211)  #Create 2x1 grid and declare ax1 as first plot
      ax2 = fig.add_subplot(212)  #Create 2x1 grid and declare ax2 as second plot
      
      xx   = np.linspace(0,5,50)
      yy   = np.linspace(0,5,50)
      X, Y = np.meshgrid(xx, yy)
      T = X**2 
      
      norm = mpl.colors.Normalize(vmin=0,vmax=10)
      pcm=ax1.pcolormesh(X,Y,T, norm =norm)
      
      cbaxes = fig.add_axes([0.95, 0.53, 0.03, 0.35]) #Add position (left, bottom, width, height)
      cb = plt.colorbar(pcm, cax = cbaxes) 
      ax2.plot(xx, xx**2)
      

      输出

      【讨论】:

        【解决方案3】:

        看来我找到了解决办法。但是,我只是添加自己的轴并将颜色条放在定义的轴上。 我仍然想知道如何轻松制作这种情节。

        fig  = plt.figure(2,figsize=(5, 8))
        gs   = gridspec.GridSpec(2, 1, height_ratios=[ 3,2],hspace=0.0)
        
        axes = fig.add_axes([0.25,0.425,0.78,0.455])
        
        ax1  = plt.subplot(gs[0])
        ax2  = plt.subplot(gs[1])
        
        xx   = np.linspace(0,5,50)
        yy   = np.linspace(0,5,50)
        XX, YY = np.meshgrid(xx, yy)
        
        TY = XX**2 
        norm = mpl.colors.Normalize(vmin=0,vmax=10)
        pcm =ax1.pcolormesh(XX,YY,TY, norm =norm)
        
        plt.colorbar(pcm, orientation="vertical", ax =axes);
        
        ax2.plot(xx, xx**2);
        
        

        这是一个更好的情节。

        【讨论】:

          猜你喜欢
          • 2017-09-02
          • 2022-11-04
          • 2022-07-05
          • 1970-01-01
          • 2021-10-08
          • 2017-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多