Matplotlib错误的颜色条分配给subp

2024-09-25 00:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的两个问题是:

  1. 为什么我绘制子图轴的顺序很重要?在
  2. 我怎样才能使bad_cb_on_top产生与works_just_fine当前给出的结果相同的结果,而不修改{}?在

版本信息:

  • 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>


Tags: thedata顺序ontopaxjustbad
1条回答
网友
1楼 · 发布于 2024-09-25 00:26:29

我可能是非常错误的,但是您可以通过将im作为可映射文件传递给colorbar()来实现正确的方法。在plot2d中:

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

我认为这样不仅指定了轴,而且指定了可映射的输入。仅供参考,它对我来说没有什么不同(使用1.3.1),所以没有任何问题,但也意味着我无法测试它。在

相关问题 更多 >