填充等高线图顶部的绘图点会增加大量空白

rob*_*ntw 4 python plot matplotlib

我有以下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()
Run Code Online (Sandbox Code Playgroud)

这给了我一个情节:

在此输入图像描述

但是,当我ax.plot(0, 30, 'p')show()获得以下内容之前添加该行时:

在此输入图像描述

似乎只添加一个点(在原始轴范围内)就会在半径轴上拧紧轴范围.

这是设计,还是这个bug?你有什么建议去修理它?我是否需要手动调整轴范围,或者是否有办法停止额外的绘图命令?

Joe*_*ton 5

如果未明确指定轴自动缩放模式,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()
Run Code Online (Sandbox Code Playgroud)

你有很多选择.

  1. 明确地调用ax.axis('image')ax.axis('tight')在代码中的某个时刻.
  2. 传入scalex=Falsescaley=False作为关键字参数plot.
  3. 手动设置轴限制.

最简单,最易读的只是显式调用ax.axis('tight'),imo

  • 在`ax.countourf`之后但在`ax.plot`之前放置`ax.autoscale(False)`是[另一种选择](http://stackoverflow.com/a/9120929/190597). (3认同)