You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python绘制积分函数故障:修改z取值后图表无显示

光度距离计算代码无图表显示的问题修复

问题分析

  • 标量绘图无法生成可见元素:你循环计算每个z对应的单个光度距离标量,而plt.plot()绘制线条需要至少两个数据点,单个标量无法生成可见的图形,这是图表无显示的核心原因。
  • numpy命名空间错误:代码开头导入numpy as np,但H()函数里用了numpy.sqrt,应改为np.sqrt,否则会触发NameError(若未报错可能是环境全局导入了numpy,但属于不规范写法)。
  • 单位不统一:光速用了2.99e8 m/s,哈勃常数H0单位是km/s/Mpc,两者单位不匹配,计算出的距离单位混乱,需统一为km/s。
  • 参数冗余传递:H_inv()调用H()时重复传H_0=70,可利用函数默认参数简化。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate


def H(z, omega_m, H_0=70):
    omega_lambda = 1 - omega_m
    z_prime = (1 + z) ** 3
    wurzel = np.sqrt(omega_m * z_prime + omega_lambda)  # 修正numpy命名空间
    return H_0 * wurzel


def H_inv(z, omega_m, H_0=70):
    return 1 / H(z, omega_m, H_0)  # 去掉冗余参数指定


def integral(z, omega_m, H_0=70):
    return integrate.quad(H_inv, 0, z, args=(omega_m, H_0))[0]


def d_L(z, omega_m, H_0=70):
    c = 299792  # 单位:km/s,与H0单位匹配
    distance = c * (1 + z) * integral(z, omega_m, H_0)
    return distance


z = [0.0, 0.1, 0.5, 2.0, 4.0, 5.0]
omega_m = 0.27

# 收集所有z对应的光度距离值
d_L_values = [d_L(zi, omega_m) for zi in z]

plt.figure(figsize=(8, 5))
# 用散点图展示离散数据,添加连线增强可视化效果
plt.scatter(z, d_L_values, s=50, label="离散数据点")
plt.plot(z, d_L_values, '-', alpha=0.7, label="数据连线")

plt.xlabel("红移 z")
plt.ylabel("光度距离 $d_L$ (Mpc)")
plt.title("红移与光度距离关系")
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

修正说明

  • 先收集所有z对应的光度距离值,再用plt.scatter()绘制离散点、plt.plot()绘制连线,确保图表正常显示。
  • 修正numpy命名空间错误,避免潜在报错。
  • 统一光速与哈勃常数单位,计算结果以天文领域常用的Mpc为单位。
  • 简化函数参数传递,让代码更简洁易读。

内容的提问来源于stack exchange,提问作者dove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:05:24