问题描述
今天在用matplotlib画图的时候,发生了一件很神奇的事,plt.figure()
不管用了!
具体代码如下:
# 调用库
import pandas as pd
import matplotlib.pyplot as plt
# 生成数据框,x为0~50,y为x的平方
df = pd.DataFrame([i/2 for i in range(100)],columns=['x'])
df['y2'] = df.x.apply(lambda x:x*x)
# 绘图
fig = plt.figure(figsize=(10,10)) # 指定画布大小
plt.plot(df.x,df.y2,label='y=x^2')
# 加注释
plt.annotate(r'y=x^2' # 标签
,xycoords='data'
,xy=(40,40*40) # 指向点
,textcoords='offset points'
,xytext=(-50,40) # 注释位置
,fontsize=15 # 字号
,c='b' # 颜色
,arrowprops=dict(arrowstyle='->' # 指向点使用的线
,connectionstyle='angle3' # 线类型
))
plt.show()
跑完报错,该报错指向第6行fig = plt.figure(figsize=(10,10))
:
TypeError: ‘tuple’ object is not callable; matplotlib figsize.
这个报错咋一看很无厘头,怎么变成了元组对象不能调用figsize()
?
而且将代码复制到其他地方跑的时候并没有问题,唯独这时候跑的时候就有问题。
解决方法
在后来的某一个巧合下,忽然意识到了错误的来源,就是一开始,我写错了代码,形如下(感兴趣的小伙伴可以复现一下~)
plt.figure = (10,10)
plt.figure
原本是一个函数,但是被我赋值成了一个元组,所以后来的代码plt.figure(figsize=(10,10))
,就变成了(10,10)(figsize=(10,10))
,把元组看成一个函数调用figsize
,故报错。
该报错或许只会在jupyter notebook和测试环境等会暂存变量的环境中才会出现,因为这类环境存储了我前面写错的赋值。如果是直接通过编译器(如vscode、pycharm等)运行代码,运行结束后变量就失效了,便不会出现这类错误赋值导致的错误。
解决方法很简单,重启内核,然后重跑代码,便可正常画图。