python - Matplotlib 分配给子图的颜色条错误

标签 python matplotlib plot colorbar

我有一个包装器,plot2d,用于 matplotlib 函数 imshow,它也调用 colorbar(请参见下面的代码)。当我以非顺序顺序在子图上使用它时(例如,子图 2 后跟子图 1),错误的颜色条会绘制在至少一个子图轴上。下面代码中的函数 bad_cb_on_top 就是一个例子。但是,当我使用 works_just_fine 时,我得到了预期的结果。这两个函数之间的唯一区别是它们绘制到子图轴的顺序。

我的两个问题是:

  1. 为什么绘制子图轴的顺序很重要?
  2. 如何让 bad_cb_on_top 产生与 works_just_fine 当前给出的结果相同的结果,而不修改 bad_cp_on_top

版本信息:

  • python 2.7.3
  • matplotlib 1.1.1

示例代码:

from pylab import *

x = linspace(-1, 1, 100)
x, y = meshgrid(x, x)
data = 1./(x**2 + y**2)

def plot2d(data, ax=None, vmax=None):
  '''A simple wrapper for implot.'''
  # if ax was given, set ax as the current axis for plotting
  if ax :
    sca(ax)

  # Plot the data
  im = imshow(data, vmax=vmax, interpolation='lanczos')
  # This line assures that ax is the axis which was just plotted on
  # even if ax was not specified
  ax = im.axes

  # Add the colorbar
  cb = colorbar(ax=ax, orientation='vertical')

  return None

figsize=[4, 7]

def bad_cb_on_top():
  # This function copies the color bar from the bottom panel 
  # to the top panel for some unknown reason.
  fig, axs = subplots(2, 1, figsize=figsize)
  plot2d(data, vmax=31, ax=axs[1])
  plot2d(data, vmax=314, ax=axs[0])
  fig.show()

def works_just_fine():
  # This function works as intended despite little change
  fig, axs = subplots(2, 1, figsize=figsize)
  plot2d(data, vmax=314, ax=axs[0])
  plot2d(data, vmax=31, ax=axs[1])
  fig.show()

bad_cb_on_top()
works_just_fine()

来自bad_cp_on_top()的输出:

Output from <code>bad_cp_on_top()</code>

来自works_just_fine()的输出

Output from <code>works_just_fine()</code>

最佳答案

我可能非常错了,但是您可以通过将 im 作为可映射对象传递到 colorbar() 来强制执行正确的错误。在plot2d中:

cb = colorbar(im, ax=ax, orientation='vertical')

我认为这样它不仅指定轴,还指定可映射输入。仅供引用,这对我来说没有什么区别(使用 1.3.1),所以没有任何问题,但这也意味着我无法测试它。

关于python - Matplotlib 分配给子图的颜色条错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378414/

相关文章:

python - Django REST API : Make field read-only for certain permission level

linux - Python ImportError no module named statistics 下载后

matlab - 我的处女帖 : Having trouble with ind2rgb function in matlab

python - 使用python修改文本文档

python - 如何使用 symPy 和 numPy 将符号替换为矩阵

python - x 和 y 必须具有相同的第一维,但具有形状 (1,) 和 (6,)

python - 刻度标签中的 Matplotlib 多种颜色

python - 当我使用 pandas 的箱线图和子图时出现错误

r 通过散点图拟合逻辑曲线

python - logits 和 labels must be same size error 使用 SoftmaxCrossEntropyWithLogits