为何Matplotlib使用命名参数调用plot()时无法生成绘图?
为什么Matplotlib的
plt.plot()用命名参数x=/y=时没有输出? 哈哈,这个坑我之前也踩过!核心原因是你误解了plt.plot()的参数设计——它的数据参数不是通过x=/y=这种命名方式传递的!
咱们拆解来看:
- 当你写
plt.plot([0.05, 0.1, 0.15], [102, 211, 393])时,这两个列表会被当作位置参数传入plot()的可变参数*args里。Matplotlib会自动把第一组数据认作x轴,第二组认作y轴,自然能正常画出图。 - 但你加了
x=和y=之后,这俩参数就被归到了plot()的关键字参数**kwargs里——而**kwargs是用来设置绘图样式(比如线条颜色、线型、标签)的,根本不是用来接收数据的!这时候Matplotlib等于没拿到任何绘图数据,当然就没有输出了。
那如果想用命名参数传数据怎么办?其实可以用xdata=和ydata=:
import matplotlib.pyplot as plt plt.plot(xdata=[0.05, 0.1, 0.15], ydata=[102, 211, 393]) plt.show()
不过更常规的写法还是用位置参数传数据,把关键字参数留给样式设置,比如:
plt.plot([0.05, 0.1, 0.15], [102, 211, 393], linestyle='--', color='#ff4444')
至于文档里写的plot(x, y),那是简化后的表述,实际函数签名是plot(*args, **kwargs)——*args支持多组(x,y)数据对,甚至只传y的话,x会自动生成0、1、2...这样的序列。
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

