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

Matplotlib自定义函数绘图无线条显示问题求助

问题解决:Matplotlib绘制自定义函数无线条显示

核心问题分析

你的代码存在两个关键错误,导致线条无法显示:

  1. 变量覆盖:先用np.linspace生成了numpy数组x,但后续for x in range(2000,32000)把x重新赋值为循环变量(最终变成整数31999),绘图时x不再是连续数组,而是单个数值,自然画不出线条。
  2. 函数输出不匹配: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:15:38