解决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()方法
在这里插入图片描述
如上图,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查找到相关的方法
在这里插入图片描述
axes.set_xticks()方法只能传进一个参数

因此只能使用set_xticklabels()方法传入自己自定义的标签刻度
在这里插入图片描述

修改代码如下

# 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()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_55579895/article/details/120679394
今日推荐