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

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

Я хотел бы построить массив таким образом, чтобы половина его появлялась в верхней полусфере полярного графика, а половина - в нижней. (Я делю массив на две половины, чтобы я мог использовать две разные цветовые карты: открыт для разных способов сделать это, пока эта функциональность сохраняется.) В настоящее время я отображаю массив с помощью 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), чтобы подчеркнуть смещение, которое я вижу.) В центре есть радиальный зазор, которого я хотел бы избежать, а также то, что кажется смещением в тета между две половинки.

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

What is displayed by the MWE.

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

1 Ответ

1 голос
/ 19 июня 2019

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

В этом случае для отображения линии достаточно уже dpi 100, plt.figure(dpi=100)

enter image description here

...