gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:30 26 4
gpt4 key购买 nike

我正在尝试绘制一个图来指定引力红移作为距离的函数。但是,我在绘图时遇到问题。我想从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com