报错通识
某个方法传进去过多的参数导致报错
问题背景:
在使用python的matplotlib模块的多个坐标系显示-plt.subplots(面向对象的画图方法)时,报错如下
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],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()
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/
转载文章受原作者版权保护。转载请注明原作者出处!