解决TypeError: set_ticks() takes 2 positional arguments but 3 were given

其他问题参考:

Python基础-TypeError:takes 2 positional arguments but 3 were given https://blog.csdn.net/weixin_42716620/article/details/82888572

报错通识

某个方法传进去过多的参数导致报错

问题背景:

在使用python的matplotlib模块的多个坐标系显示-plt.subplots(面向对象的画图方法)时,报错如下

TypeError: set_ticks() takes 2 positional arguments but 3 were given

附上学习文章
jupyter notebook中使用python的matplotlib模块绘图以及matplotlib简单介绍,包括Matplotlib图像结构https://blog.csdn.net/weixin_55579895/article/details/120673767?spm=1001.2014.3001.5501

完整代码如下

2.2.4 多个坐标系显示-plt.subplots(面向对象的画图方法)

准备x, y坐标的数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
增加北京的温度数据
y_beijing = [random.uniform(1,4) for i in x]

1 创建绘布
注意:plt.函数名()相当于面向过程的画图方法,
axes.set_方法名()相当于面向对象的画图方法。
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

2 绘制折线图
axes[0].plot(x,y_shanghai,label='上海')
使用多次plot可以画多个折线
axes[1].plot(x,y_beijing,label='北京',color='r',linestyle='--')

3 辅助显示
构造x轴刻度标签
x_ticks_label = ['11点{}分'.format(i) for i in x]
print(x_ticks_label[::5])

构造y轴刻度
y_ticks_label = range(40)
修改x,y轴坐标的刻度显示,注意使用subplot方法创建的图表不能直接使用set_sticks方法传入自定义的刻度,必须使用set_sticklabels()方法
axes[0].set_xticks(x[::5],x_ticks_label[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[0].set_yticks(y_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
axes[1].set_yticks(y_ticks_label[::5])
添加辅助线
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
添加x,y轴描述信息及标题
axes[0].set_xlabel('时间')
axes[0].set_ylabel('温度')
axes[0].set_title('上海中午11点0分到12点之间的温度变化图示')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
axes[1].set_title('北京中午11点0分到12点之间的温度变化图示')
显示图例
axes[0].legend()
axes[1].legend()

4 显示图像
plt.show()

问题解决

原因是使用subplot方法创建的图表不能直接使用set_sticks方法传入自定义的刻度,必须使用set_sticklabels()方法

解决TypeError: set_ticks() takes 2 positional arguments but 3 were given
如上图,set_sticks方法只能有一个参数,而我传进去了两个报错,会报错,使用set_sticklabels()方法后问题解决

; 查询官网

关于axes子坐标系的更多方法:参考https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes

  • 注意1:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。
  • 注意2: 使用subplot方法创建的图表 不能直接使用set_xticks方法传入自定义的刻度,必须使用 *set_xticklabels()方法

打开上面的网址https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
F5查找到相关的方法

解决TypeError: set_ticks() takes 2 positional arguments but 3 were given
axes.set_xticks()方法只能传进一个参数
解决TypeError: set_ticks() takes 2 positional arguments but 3 were given
因此只能使用set_xticklabels()方法传入自己自定义的标签刻度
解决TypeError: set_ticks() takes 2 positional arguments but 3 were given

修改代码如下

2.2.4 多个坐标系显示-plt.subplots(面向对象的画图方法)

准备x, y坐标的数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
增加北京的温度数据
y_beijing = [random.uniform(1,4) for i in x]

1 创建绘布
注意:plt.函数名()相当于面向过程的画图方法,
axes.set_方法名()相当于面向对象的画图方法。
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

2 绘制折线图
axes[0].plot(x,y_shanghai,label='上海')
使用多次plot可以画多个折线
axes[1].plot(x,y_beijing,label='北京',color='r',linestyle='--')

3 辅助显示
构造x轴刻度标签
x_ticks_label = ['11点{}分'.format(i) for i in x]
print(x_ticks_label[::5])

构造y轴刻度
y_ticks_label = range(40)
修改x,y轴坐标的刻度显示,注意使用subplot方法创建的图表不能直接使用set_sticks方法传入自定义的刻度,必须使用set_sticklabels()方法
axes[0].set_xticks(x[::5])

=========================修改的地方
axes[0].set_xticklabels(x_ticks_label[::5])
=========================

axes[0].set_yticks(y_ticks_label[::5])
axes[1].set_xticks(x[::5])

=========================修改的地方
axes[1].set_xticklabels(x_ticks_label[::5])
=========================

axes[1].set_yticks(y_ticks_label[::5])
添加辅助线
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
添加x,y轴描述信息及标题
axes[0].set_xlabel('时间')
axes[0].set_ylabel('温度')
axes[0].set_title('上海中午11点0分到12点之间的温度变化图示')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
axes[1].set_title('北京中午11点0分到12点之间的温度变化图示')
显示图例
axes[0].legend()
axes[1].legend()

4 显示图像
plt.show()

解决TypeError: set_ticks() takes 2 positional arguments but 3 were given

Original: https://blog.csdn.net/weixin_55579895/article/details/120679394
Author: 十三先生po
Title: 解决TypeError: set_ticks() takes 2 positional arguments but 3 were given

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/765903/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球