python - 如何从特定半径开始绘制 imshow?

标签 python imshow

我正在尝试绘制一个图来指定引力红移作为距离的函数。但是,我在绘图时遇到问题。我想从 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] 处都没有值,因为 xy 从 2 开始...

让我们比较一下 imshowcontourf:

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...

但是,imshow 有一些有趣的 kwargs 供您使用。
看看上面的图会发生什么

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

enter image description here

关于python - 如何从特定半径开始绘制 imshow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52596431/

相关文章:

python - 获取并显示 numpy 数组中一堆 3 channel 图像中的一个图像

python - 使用 imshow 和 twiny : cannot set xlim

python - 为什么当我将鼠标悬停在 imshow 上时不显示像素值?

python - 在python中有条件地匹配两个数据库

python - 使用 matplotlib.pyplot、imshow() 和 savefig() 以全分辨率绘图?

python - 为什么 Pygame 中的 Clock.tick() 不能准确测量时间?

Python:通过套接字接收数据 - [Errno 11] 资源暂时不可用

具有特定值颜色图的 Python imshow

python - 为什么使用 Numba 进行矩阵乘法很慢?

python - 使用Python将base64编码的图像推送到Google Contacts