15

quadmesh単純な極投影プロットを作成するために使用しています。これは、基本的に私がやろうとしていることを生成する最小限のスクリプトです:

from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as plt

def make_plot(data,fig,subplot):
    nphi,nt = data.shape
    phi_coords = np.linspace(0,np.pi*2,nphi+1) - np.pi/2.
    theta_coords = np.linspace(0,np.radians(35),nt+1)

    ax = fig.add_subplot(subplot,projection='polar')
    ax.set_thetagrids((45,90,135,180,225,270,315,360),(9,12,15,18,21,24,3,6))
    ax.set_rgrids(np.arange(10,35,10),fmt='%s\u00b0')  

    theta,phi = np.meshgrid(phi_coords,theta_coords)
    quadmesh = ax.pcolormesh(theta,phi,data)
    ax.grid(True)
    fig.colorbar(quadmesh,ax=ax)
    return fig,ax


a = np.zeros((360,71)) + np.arange(360)[:,None]
b = np.random.random((360,71))
fig = plt.figure()
t1 = make_plot(a,fig,121)
t2 = make_plot(b,fig,122)
fig.savefig('test.png')

上記のスクリプトは、次のようなプロットを作成します。

ここに画像の説明を入力

カラーバーに次のことを希望します。

  1. 6 ラベルを重ねないでください。
  2. プロットとほぼ同じ高さになるようにスケーリングされます。

これを適切に機能させるためのトリックはありますか? (このレイアウトは私が使用する唯一のものではないことに注意してください-たとえば、1x2 レイアウトまたは 4x4 レイアウトを使用する可能性があります...カラーバーを同じ高さにスケーリングする方法があるようです関連するプロット...)

4

2 に答える 2

14

padshrink、およびaspectkwargsを組み合わせてこれを行うことができます。

from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as plt

def make_plot(data,fig,subplot):
    nphi,nt = data.shape
    phi_coords = np.linspace(0,np.pi*2,nphi+1) - np.pi/2.
    theta_coords = np.linspace(0,np.radians(35),nt+1)

    ax = fig.add_subplot(subplot,projection='polar')
    ax.set_thetagrids((45,90,135,180,225,270,315,360),(9,12,15,18,21,24,3,6))
    ax.set_rgrids(np.arange(10,35,10),fmt='%s\u00b0')  

    theta,phi = np.meshgrid(phi_coords,theta_coords)
    quadmesh = ax.pcolormesh(theta,phi,data)
    ax.grid(True)
    cb = fig.colorbar(quadmesh,ax=ax, shrink=.5, pad=.2, aspect=10)
    return fig,ax,cb


a = np.zeros((360,71)) + np.arange(360)[:,None]
b = np.random.random((360,71))
fig = plt.figure()
t1 = make_plot(a,fig,121)
t2 = make_plot(b,fig,122)

figure.colorbar文書

これらのパラメーターの最適な値は、軸の縦横比によって異なります。

軸のサイズは極座標プロットにシュリンクラップされていないようです。したがって、1x2 配置では、軸オブジェクトの一部であるプロットの上下に多くのスペースがありますが、空です。カラーバーのサイズは、円形のサイズではなく、長方形のサイズからキーオフされているため、デフォルト値がうまく機能しないのはなぜですか。シュリンク包装を行う方法はおそらくありますが、その方法がわかりません。

別の方法は、図を強制的に正しい縦横比にすることです。例:

fig.set_size_inches(10, 4) # for 1x2
fig.set_size_inches(4, 10) # for 2x1

これにより、サブプロットが正方形になるため、デフォルト値が多かれ少なかれ機能します。

于 2013-05-22T22:39:56.157 に答える