python中使用annotate时,报错误

本文介绍了在更新到matplotlib3.3版本后,由于函数`annotate()`的`s`参数更改为`test`,导致的TypeError问题。提供了两种解决方案:一是直接更新代码中的参数,另一种是降级matplotlib包版本。推荐使用前者以适应新版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

TypeError                                 Traceback (most recent call last)
Cell In[58], line 161
    159 plt.xlabel("FPR")        
    160 plt.ylabel("TPR")
--> 161 plt.annotate(xy= (.4,.2),xytext= (.5,.2),s = 'ROC curve (area = % 0.2f)' % auc_test)

TypeError: annotate() missing 1 required positional argument: 'text'

后面百度查了一下发现,matplotlib3.3及以后,将这个函数中的参数s改为了test。 

解决办法:

将参数改为test=test。

还有一种办法将这个matplotlib包降到3.3之前的版本。不过第一种解决办法比较简单,在这里建议使用第一种方法。

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 读取数据 df = pd.read_csv('pre_data1-9(1).csv') # 将数据采集间转换为日期间类型 df['数据采集间'] = pd.to_datetime(df['数据采集间']) # 提取月份信息 df['月份'] = df['数据采集间'].dt.month # **🚀 统计不同报警等级的次数** alarm_grade_counts = df['最高报警等级'].value_counts().sort_index().reset_index() alarm_grade_counts.columns = ['报警等级', '次数'] # **🚀 按月统计各报警等级的次数** alarm_grade_monthly = df.groupby(['月份', '最高报警等级']).size().unstack().fillna(0) alarm_grade_monthly.columns = [f"{int(col)}级" for col in alarm_grade_monthly.columns] # **🚀 重新定义 1间区间** df['间区间'] = df['数据采集间'].dt.hour.astype(str) + '-' + (df['数据采集间'].dt.hour + 1).astype(str) # **🚀 统计各间段的报警等级次数** alarm_grade_time = df.groupby(['间区间', '最高报警等级']).size().unstack().fillna(0) # **🚀 统计不同间段的用车次数** usage_by_time = df.groupby('间区间').size() # **📊 绘制报警等级次数柱状图** plt.figure(figsize=(10, 6)) sns.barplot(x='报警等级', y='次数', data=alarm_grade_counts, palette="Blues") plt.title('故障报警等级次数柱状图') plt.xlabel('报警等级') plt.ylabel('次数') plt.grid(axis='y', linestyle="--", alpha=0.7) plt.tight_layout() plt.savefig(r"C:\Users\wei\Pictures\故障报警等级次数柱状图.png", dpi=300) plt.show() # **📊 绘制各报警等级的月度趋势** plt.figure(figsize=(10, 6)) for grade in alarm_grade_monthly.columns: plt.plot(alarm_grade_monthly.index, alarm_grade_monthly[grade], marker='o', label=grade) plt.title('各报警等级次数趋势图') plt.xlabel('月份') plt.ylabel('次数') plt.grid(True, linestyle="--", alpha=0.7) plt.legend(title="报警等级") plt.tight_layout() plt.savefig(r"C:\Users\wei\Pictures\各报警等级次数趋势图.png", dpi=300) plt.show() # **📊 绘制报警等级间分布热力图(1间隔)** plt.figure(figsize=(12, 8)) sns.heatmap(alarm_grade_time, annot=True, cmap='Blues', fmt=".0f") plt.title('报警等级间分布热力图(1间隔)') plt.xlabel('报警等级') plt.ylabel('间区间') plt.xticks(rotation=45) plt.tight_layout() plt.savefig(r"C:\Users\wei\Pictures\报警等级间分布热力图_1.png", dpi=300) plt.show() # **📊 绘制不同间段的用车次数(1间隔)** plt.figure(figsize=(12, 6)) sns.barplot(x=usage_by_time.index, y=usage_by_time.values, palette="coolwarm") for x, y in zip(usage_by_time.index, usage_by_time.values): plt.annotate(f'{y}', (x, y), textcoords='offset points', xytext=(0, 5), ha='center') plt.title("不同间段的用车次数(1间隔)") plt.xlabel("间区间") plt.ylabel("用车次数") plt.xticks(rotation=45) plt.grid(axis='y', linestyle="--", alpha=0.7) plt.tight_layout() plt.savefig(r"C:\Users\wei\Pictures\不同间段的用车次数_1.png", dpi=300) plt.show() # **📌 输出统计数据** print('📌 各报警等级的总次数:\n', alarm_grade_counts) print('📌 各报警等级的月度趋势:\n', alarm_grade_monthly) print('📌 各间段的报警次数(1间隔):\n', alarm_grade_time) print('📌 不同间段的用车次数(1间隔):\n', usage_by_time) 优化代码
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值