Как построить imshow, начиная с определенного радиуса? - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь построить график для определения гравитационного красного смещения как функции расстояния.Тем не менее, у меня есть проблема в заговоре.Я хочу построить его из rs=1.0, потому что ни один объект не может быть обнаружен в радиусе Шварцшильда, rs=1.0 в моем случае.

Я пытался сделать маску, но это былоне работает.Есть ли способ сделать контурный график с начальным радиусом около r>1 ?.На самом деле, на рисунке выше, я хочу, чтобы мое imshow построило график величины красного смещения от синего сплошного круга, а не на r=0 (я понятия не имею, почему это начинается там).

import numpy as np
import matplotlib.pyplot as plt

rs=1
ang=np.linspace(0,2*np.pi,2000)
x, y = np.mgrid[2:100, 2:100]
dist = np.hypot(x, y) # Linear distance from point 0, 0
z = np.sqrt(1/dist)
f=1/np.sqrt((1-rs*z)/(1-rs/4))*(1/10)

plt.imshow(f, interpolation='bilinear')

a=np.cos(ang)
b=np.sin(ang)

plt.xlim(0,15)
plt.ylim(0,15)
plt.plot(a,b)
plt.colorbar()
plt.show()

1 Ответ

0 голосов
/ 02 октября 2018

Я думаю, что есть недоразумение в виде сюжета.plt.imshow создает цветовые отображения 2D-массивов - но шкалы осей показывают не независимые переменные данных, а только индексы массива.Это отличается от, например, plt.contourf.

Фактически, ваш массив f даже не имеет значений в [x=1, y=1], поскольку x и y начинаются с 2 ...

Давайте сравним imshowи contourf:

fig, axs = plt.subplots(1, 2)
axs[0].imshow(f, interpolation='bilinear')
axs[0].set_xlim(0,15)
axs[0].set_ylim(0,15)

axs[1].contourf(x, y, f)
axs[1].set_aspect(1)

axs[1].set_xlim(0,15)
axs[1].set_ylim(0,15)

enter image description here

Или другими словами: проверьте пределы своих весов, не устанавливая xlim и ylim: они идут от -От 0,5 до 97,5 вместо от 2 до 99 ...

Однако, есть интересные для вас kwargs imshow.
Посмотрите, что происходит с приведенным выше сюжетом с помощью

axs[0].imshow(f, interpolation='bilinear', origin='lower', extent=[2, 99, 2, 99])

enter image description here

...