Matplotlib自定义函数绘图无线条显示问题求助
问题解决:Matplotlib绘制自定义函数无线条显示
核心问题分析
你的代码存在两个关键错误,导致线条无法显示:
- 变量覆盖:先用
np.linspace生成了numpy数组x,但后续for x in range(2000,32000)把x重新赋值为循环变量(最终变成整数31999),绘图时x不再是连续数组,而是单个数值,自然画不出线条。 - 函数输出不匹配:
pmgc(x)返回单个常数0.853,而Matplotlib的plot方法需要与x长度匹配的y值数组才能绘制线条。
修正后的代码
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(8,4)) # 定义x轴数组(保留numpy数组,避免被覆盖) x = np.linspace(2000, 32000) # 修正函数:让pmgc返回和x同长度的常数数组,pmec直接处理numpy数组 def pmgc(x): return np.full_like(x, 0.853) def pmec(x): return (-124.84 / x) + pmgc(x) # 直接计算整个数组的y值,无需逐个循环 y_pmgc = pmgc(x) y_pmec = pmec(x) # 绘图 ax.plot(x, y_pmgc, color='blue', linewidth=3, label='Propensão Marginal a Cosumir') ax.plot(x, y_pmec, color='red', linewidth=3, label='Propensão Média a Cosumir') plt.rcParams["figure.autolayout"] = True ax.set_xlabel("Renda") # 直接用plot的label参数,简化legend调用 plt.legend(loc='upper left', borderaxespad=0, bbox_to_anchor=(1.02, 1)) plt.title('Gráfico da Questão 6, item c\nFeito por Luiz Mario. Fonte: Autor', loc='center') plt.show() # 显式调用确保图像显示
关键修改说明
- 移除无用循环:numpy支持向量化运算,直接传入数组即可批量计算y值,无需逐个循环。
- 修正
pmgc函数:用np.full_like生成与x长度一致的常数数组,保证维度匹配。 - 避免变量覆盖:保留最初的numpy数组
x用于绘图,不被循环变量覆盖。 - 优化legend用法:直接在
plot中指定label参数,代码更简洁。 - 添加
plt.show():确保图像在所有环境下都能正常显示。
内容的提问来源于stack exchange,提问作者Luiz Mário Andrade
相关产品推荐
相关产品推荐

