Полярный график pcolormesh показывает смещение (как отобразить два массива в разных полушариях полярного графика?)

Как я могу (в питоне) точно и гибко отображать два массива в разных полушариях полярного графика?

Я хотел бы построить массив таким образом, чтобы половина его отображалась в верхней полусфере полярного графика, а половина — в нижней. (Я разделяю массив на две половины, чтобы использовать две разные цветовые карты: открыты для разных способов сделать это, пока эта функциональность сохраняется.) В настоящее время я показываю массив с помощью pcolormesh, но не могу определить сетку. правильно, чтобы избежать смещения на графике. Ниже приведен простой пример с фиктивными данными. Я хотел бы, чтобы в этом примере была показана одна прямая линия от верхней части графика к нижней — красная сверху, синяя снизу, без разрыва посередине.

# make test data: should appear as a straight line down the center
Rtest = np.zeros((39, 165), np.float_)
Rtest[:, 82] = 1.
Itest = np.ones(39)

fig = plt.figure()
ax = fig.add_subplot(111, projection="polar")

# plot one half on the bottom
nv1, nthets1 = Rtest[:20, :].shape
r1 = np.linspace(0, nv1, nv1) 
t1 = np.linspace(np.pi, np.pi*2, nthets1+1, endpoint=True)
R1, T1  = np.meshgrid(r1, t1)
ax.pcolormesh(T1, R1, Rtest[:20, :].T, cmap='Blues')

# plot the other half on top
nv2, nthets2 = Rtest[20:, :].shape
r2 = np.linspace(0, nv2, nv2)
t2 = np.linspace(0, np.pi, nthets2, endpoint=False)
R2,T2  = np.meshgrid(r2, t2)
ax.pcolormesh(T2, R2, Rtest[20:, :].T, cmap='Reds')#, **newallkwargs)

ax.plot(0, 0, '.')

Вместо этого отображается следующее. (Я также нарисовал точку в точке (0, 0), чтобы подчеркнуть смещение, которое я вижу.) В центре есть радиальный зазор, которого я хотел бы избежать, а также то, что кажется смещением в тета между две половины.

Макетные данные отражают общий случай: длина массива может быть нечетной, так что массив нельзя разрезать на две четные половины. В этом случае я бы хотел, чтобы более короткая половина просто не простиралась так далеко радиально, как другая (как это происходит в красном полукруге ниже).

Что показывает MWE.

Любые указатели на полярные графики pcolormesh или на то, как добиться желаемого эффекта, приветствуются.


person S E Clark    schedule 18.06.2019    source источник


Ответы (1)


"Линия" кажется обрезанной, потому что разрешение изображения недостаточно высокое. Один пиксель изображения pcolor намного меньше, чем один пиксель изображения png. Это распространенная проблема с понижением дискретизации данных, и для нее нет какого-либо канонического решения, кроме, конечно, слишком сильного понижения дискретизации.

В этом случае уже 100 dpi достаточно, чтобы показать линию, plt.figure(dpi=100)

введите здесь описание изображения

person ImportanceOfBeingErnest    schedule 18.06.2019