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

23

这种组合(以及接近这些的值)似乎“神奇地”让我保持颜色条按比例缩放到绘图,无论显示尺寸如何。

plt.colorbar(im,fraction=0.046, pad=0.04)
于 2014-11-03T18:22:56.557 回答
14

您可以使用 、 和 kwargs 的组合来做到padshrink一点aspect

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 回答