PyCharm中Matplotlib绘制X_e-z曲线无折线显示问题求助
解决matplotlib绘图空白问题的方案
问题原因
你的代码在循环中每次调用plt.plot(X_e, z)时,仅绘制单个离散点,而matplotlib默认的折线模式需要至少两个连续点才能生成可见线条,单个点不会被渲染,因此画布显示空白。此外,循环逐点绘图的方式效率极低,也不符合numpy的最佳实践。
修复方案
优化思路
- 预先生成所有z值的数组,利用numpy的向量化计算批量求解X_e,避免循环。
- 一次性调用绘图函数生成连续曲线,而非逐点绘制。
修改后的代码
import numpy as np import matplotlib.pyplot as plt case=int(input('Which Case [1 (PWR) or 2 (BWR)]? ')) if case == 1: # PWR H = 3.80 # m Lc = 3.80 # m D_rod = 0.0095 # m pitch = 0.0125 # m G = 3460 # kg/m^2-s q_0 = 33000 # W/m - Linear heat rate P_0 = 15 # MPa - Initial pressure T_f_in = 551 # Kelvin - Inlet temperature T_sat = 373 # Kelvin cp = 4.22 # kJ/kg hfg = 2256.4 # kJ/kg heated_parameter = np.pi * D_rod # 用numpy内置π提高精度 area = pitch**2 - 0.25 * np.pi * D_rod**2 # m^2 circumference = np.pi * D_rod # 简化计算:2πr = πD # 生成所有z值的数组 z = np.arange(0, 3.8, 0.001) # 向量化计算X_e,无需循环 X_e = - q_0 * heated_parameter / (G * circumference * area * hfg) * H/np.pi * np.cos(np.pi * z/H) - cp * (T_sat - T_f_in)/hfg # 一次性绘制连续曲线,X_e为横轴,z为纵轴 plt.plot(X_e, z, linewidth=1) # 添加坐标轴标签和标题,提升可读性 plt.xlabel('X_e') plt.ylabel('z (m)') plt.title('X_e vs z') plt.grid(True) plt.show()
关键修改点
- 替换手动输入的
3.14为np.pi,计算精度更高。 - 用numpy数组批量生成z值并计算X_e,避免低效的循环操作。
- 单次调用
plt.plot(X_e, z)绘制连续曲线,确保线条可见。 - 添加坐标轴标签、标题和网格,让图表信息更清晰。
额外提示
如果需要保留逐点输出验证,可以在计算完成后添加:
# 打印前5组数据验证 for i in range(5): print(f"z={z[i]:.3f}, X_e={X_e[i]:.6f}")
内容的提问来源于stack exchange,提问作者Joseph Wunschel
相关产品推荐
相关产品推荐

