我正在尝试绘制一个图来指定引力红移作为距离的函数。但是,我在绘图时遇到问题。我想从 rs=1.0
开始绘制它,因为在 schwarzshild 半径内无法检测到任何物体,在我的例子中是 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()
最佳答案
我认为这种情节有一个误解。 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)
或者换句话说:在不设置 xlim 和 ylim 的情况下检查比例的限制:它们从 -0,5 到 97,5 而不是 2 到 99...
但是,imshow
有一些有趣的 kwargs 供您使用。
看看上面的图会发生什么
axs[0].imshow(f, interpolation='bilinear', origin='lower', extent=[2, 99, 2, 99])
关于python - 如何从特定半径开始绘制 imshow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52596431/