Matplotlib双Y轴图表仅显轴标签无数据的问题排查与解决
解决Matplotlib双Y轴图表无数据曲线问题
问题场景
我需要用Matplotlib绘制双Y轴图表,展示净功率(Net Power)、供电户数与汽轮机峰值温度的关联,以此分析特定质量流量、高低压参数及蒸汽品质下的汽轮机性能。数组已完成赋值,但运行初始代码后,图表仅显示正确的轴标签,完全没有数据曲线。
问题排查
一开始尝试手动设置坐标轴范围,问题依旧。后来检查代码发现核心错误:错误地将ax1.plot、ax2.plot赋值为元组,而非调用plot()方法来绘制曲线。
代码对比
初始错误代码
import matplotlib.pyplot as plt fig, ax1 = plt.subplots() # 错误写法:将plot赋值为元组,未实际调用绘图方法 ax1.plot = (temp_array, net_power_array, 'b-', label='Net Power') ax1.set_xlabel('Turbine Peak Temperature (°C)') ax1.set_ylabel('Net Power (MW)', color='b') ax2 = ax1.twinx() ax2.plot = (temp_array, households_array, 'r-', label='Households Supplied') ax2.set_ylabel('Number of Households', color='r') plt.title('Turbine Performance Analysis') plt.legend() plt.show()
数组填充代码
# 示例数组赋值(根据实际业务逻辑填充) temp_array = [500, 550, 600, 650, 700] net_power_array = [120, 145, 170, 190, 205] households_array = [24000, 29000, 34000, 38000, 41000]
修正后的最终代码
import matplotlib.pyplot as plt # 数组赋值 temp_array = [500, 550, 600, 650, 700] net_power_array = [120, 145, 170, 190, 205] households_array = [24000, 29000, 34000, 38000, 41000] fig, ax1 = plt.subplots(figsize=(10,6)) # 正确调用plot()方法绘制曲线 line1, = ax1.plot(temp_array, net_power_array, 'b-', label='Net Power') ax1.set_xlabel('Turbine Peak Temperature (°C)') ax1.set_ylabel('Net Power (MW)', color='b') ax1.tick_params(axis='y', labelcolor='b') ax2 = ax1.twinx() line2, = ax2.plot(temp_array, households_array, 'r-', label='Households Supplied') ax2.set_ylabel('Number of Households', color='r') ax2.tick_params(axis='y', labelcolor='r') # 合并图例 plt.title('Turbine Performance Analysis') lines = [line1, line2] ax1.legend(lines, [line.get_label() for line in lines]) plt.tight_layout() plt.show()
修正后效果
图表成功显示两条数据曲线:蓝色曲线对应净功率随汽轮机峰值温度的变化,红色曲线对应供电户数的变化,双Y轴标签与数据匹配,能直观分析汽轮机性能关联关系。
内容的提问来源于stack exchange,提问作者Tman01
相关产品推荐
相关产品推荐

