其他问题参考:
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
打开上面的网址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()