Радиальные тепловые карты в матплотлиб - PullRequest
0 голосов
/ 03 мая 2020

У меня довольно много проблем, чтобы создать радиальную тепловую карту. В настоящее время я использую следующий сценарий:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = Axes3D(fig)

losses = np.random.rand(360)
rad = np.linspace(0, 2*np.pi, 360)
r, th = np.meshgrid(rad, losses)
z = 1*losses

plt.subplot(projection="polar")
plt.pcolormesh(th, r, z)
plt.plot(losses, r, color='k', ls='none') 
plt.grid()
plt.show()

Я получаю сообщение об ошибке с этим сценарием, которое я не совсем понимаю, почему:

ValueError: not enough values to unpack (expected 2, got 1)

Моя цель состоит в том, чтобы достичь чего-то, что выглядит так:

enter image description here

enter image description here

Итак, каждое значение в losses (от 0 до 1) представляет интервал в 1 градус, представляющий собой линию одинаковой величины в каждой точке (поэтому я задаю z = 1*losses) от центра к поверхности круга. Есть идеи, что может пойти не так?

1 Ответ

1 голос
/ 03 мая 2020

Ссылки на 3D немного сбивают с толку. Кроме того, losses является одномерным массивом, а для pcolormesh необходима 2D-информация.

Приведенный ниже код создает фиктивный 2D me sh путем разбиения 1D losses. Также rad как имя может сбивать с толку. Обычно на полярной диаграмме есть r в радиальном направлении (наружу от центра) и theta для углов вокруг круга. Итак, в этом примере rad идентифицируется с theta. Я создал отдельный y для радиального направления, так как он похож на ось Y на обычном графике.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

losses = np.random.rand(360)
rad = np.linspace(0, 2*np.pi, 360)
y = np.linspace(losses.min(), losses.max(), 50)
theta, r = np.meshgrid(rad, y)
z = np.tile(losses, (len(y), 1))

plt.subplot(projection="polar")
plt.pcolormesh(theta, r, z)
plt.grid()
# plt.yticks([]) # to remove the ticks and tick labels in the radial direction
plt.show()

Слева вывод кода. Справа вывод, когда losses будет больше функции (np.sin(rad*5)) и с другой картой цветов (cmap='inferno').

example plot

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