【问题标题】:Plotting point on top of filled contour plot adds lots of blank space填充等高线图顶部的绘图点会增加大量空白空间
【发布时间】:2012-02-21 15:19:43
【问题描述】:

我有以下 Python 代码用于绘制填充轮廓图:

  def plot_polar_contour(values, azimuths, zeniths):
  theta = np.radians(azimuths)
  zeniths = np.array(zeniths)

  values = np.array(values)
  values = values.reshape(len(azimuths), len(zeniths))

  r, theta = np.meshgrid(zeniths, np.radians(azimuths))
  fig, ax = subplots(subplot_kw=dict(projection='polar'))
  ax.set_theta_zero_location("N")
  ax.set_theta_direction(-1)
  cax = ax.contourf(theta, r, values, 30)
  autumn()
  cb = fig.colorbar(cax)
  cb.set_label("Pixel reflectance")
  show()

这给了我一个类似的情节:

但是,当我在 show() 之前添加行 ax.plot(0, 30, 'p') 时,我得到以下信息:

似乎只添加一点(在原始轴范围内)就搞砸了半径轴上的轴范围。

这是设计使然,还是一个错误?你会建议做什么来解决它?我是否需要手动调整轴范围,或者有没有办法阻止额外的绘图命令这样做?

【问题讨论】:

    标签: python plot matplotlib


    【解决方案1】:

    如果未明确指定轴自动缩放模式,plot 将使用“松散”自动缩放,contourf 将使用“紧密”自动缩放。

    同样的事情发生在非极轴上。例如

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.imshow(np.random.random((10,10)))
    plt.plot([7], [7], 'ro')
    plt.show()
    

    你有很多选择。

    1. 在代码中的某个位置显式调用ax.axis('image')ax.axis('tight')
    2. scalex=Falsescaley=False 作为关键字参数传递给plot
    3. 手动设置轴限制。

    最简单、最易读的方法是直接显式调用ax.axis('tight'), i.m.o.

    【讨论】:

    • ax.autoscale(False) 放在ax.countourf 之后但在ax.plot 之前是another option
    • 谢谢。使用scalex=Falsescaley=False 可以解决问题,但我更喜欢使用ax.axis('tight'),因为它更干净一些,但我无法让它工作。我应该在哪里拨打ax.axis('tight')?我尝试在调用ax.plot 之前和之后以及调用ax.contourf 之前和之后放置它。有什么想法吗?
    • @unutbu:谢谢,效果很好,而且比其他一些选项更明显。
    • @robintw - ax.axis('tight') 可以在代码中使用imshow 的任何地方工作,但contourf 做的事情有点不同(我忘了...)。 ax.axis('image')ax.axis('tight') 如果您在调用 plot 之后放置它们,应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多