Точка построения поверх заполненного контурного графика добавляет много пустого пространства - PullRequest
4 голосов
/ 21 февраля 2012

У меня есть следующий код 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()

Это дает мне сюжет вроде:

enter image description here

Однако, когда я добавляю строку ax.plot(0, 30, 'p') непосредственно перед show(), я получаю следующее:

enter image description here

Кажется, что просто добавление этой одной точки (которая находится в пределах исходного диапазона осей) приводит к завинчиванию диапазона осей на оси радиуса.

Это по замыслу или это ошибка? Что бы вы предложили сделать, чтобы это исправить? Нужно ли вручную настраивать диапазоны осей или есть способ остановить выполнение дополнительной команды построения графика?

1 Ответ

5 голосов
/ 21 февраля 2012

Если режим автоматического масштабирования оси не указан явно, 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=False и scaley=False в качестве аргументов ключевых слов для plot.
  3. Установить пределы оси вручную.

Самым простым и удобным для чтения является просто явный вызов ax.axis('tight'),имо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...